使用Scala Breeze的SBT编译器崩溃
我正在编写一个代码来执行内核K-Means(aka,但有一个技巧)。我需要生成数据,作为第一个简单的生成器,我尝试实现一个高斯混合模型。这是我的代码:使用Scala Breeze的SBT编译器崩溃,scala,sbt,scala-breeze,Scala,Sbt,Scala Breeze,我正在编写一个代码来执行内核K-Means(aka,但有一个技巧)。我需要生成数据,作为第一个简单的生成器,我尝试实现一个高斯混合模型。这是我的代码: package p02kmeans import breeze.linalg._ import breeze.stats.distributions._ /** * First data generation is simple, gaussian mixture model. */ object Data { class Gauss
package p02kmeans
import breeze.linalg._
import breeze.stats.distributions._
/**
* First data generation is simple, gaussian mixture model.
*/
object Data {
class GaussianClassParam (
val mean: Double,
val sd: Double)
/**
* @param proportion marginal probability for each label
* @param param param[j][k] returns the GaussianClassParam for the k class of the j variable
* @param nObs number of observations to be generated
* @result DenseMatrix_ij where i is the observation index and j is the variable number
*/
def gaussianMixture(
proportion: DenseVector[Double],
param: Vector[Vector[GaussianClassParam]],
nObs: Int)
: DenseMatrix[Double] = {
val nVar = param.size
val multiSampler = Multinomial(proportion) // sampler for the latent class
val varSamplerVec = param.map(v => v.map(c => Gaussian(c.mean, c.sd)))
val zi = DenseVector.fill[Int](nObs)(multiSampler.sample)
val data = DenseMatrix.tabulate[Double](nObs, nVar)((i, j) => varSamplerVec(j)(zi(i)).sample)
return data
}
}
当我尝试编译代码时(我在Windows 10上使用Scala Ide和sbt eclipse),我会遇到两个错误:
- Scala编译器中的错误:断言失败:列表(方法apply$mcI$sp,方法apply$mcI$sp)
SBT builder在编译时崩溃。错误消息为“断言失败:列表(方法应用$mcI$sp,方法应用$mcI$sp)”。有关详细信息,请查看错误日志。
val data = DenseMatrix.tabulate[Double](nObs, nVar)((i, j) => varSamplerVec(j)(zi(i)).sample)
然后消失在:
val data = DenseMatrix.tabulate[Double](nObs, nVar)((i, j) => 12.0)
你能帮我调试一下吗
我的sbt配置:
name := "Sernel"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.scalanlp" %% "breeze" % "0.13.1",
"org.scalanlp" %% "breeze-natives" % "0.13.1",
"org.scalanlp" %% "breeze-viz" % "0.13.1"
)
我的OSX设置也有同样的错误
如果您想测试整个软件包(就像,如果您想重现错误一样),代码可以在Github上找到:,我可以提供方向:)。这似乎是一个编译器错误(我认为在scala宏中,Breeze正在使用这些错误)。您可以尝试在项目中执行完全清理(甚至可能包括
.ivy2
文件夹-这可能是MacOS和Windows设置之间的差异),还可以将scala更新为2.11.11(甚至可能是2.12.x)
然而,Scala 2.11.6的类似问题(有些东西告诉我它是在Scala的后续版本中继承的)并没有得到修复:
因此,有时您可能需要重复执行清理,或者尝试其他类似NumPy的方法,如:scalala、Nd4j/Ndjs
尝试另一个IDE(IDEA/Atom)或尝试使用“裸”SBT也会有所帮助,因为Eclipse可能会通过调用Scala的编译器前端来进行干扰。这似乎是一个编译器错误(我认为在Scala宏中,Breeze正在使用这些错误)。您可以尝试在项目中执行完全清理(甚至可能包括
.ivy2
文件夹-这可能是MacOS和Windows设置之间的差异),还可以将scala更新为2.11.11(甚至可能是2.12.x)
然而,Scala 2.11.6的类似问题(有些东西告诉我它是在Scala的后续版本中继承的)并没有得到修复:
因此,有时您可能需要重复执行清理,或者尝试其他类似NumPy的方法,如:scalala、Nd4j/Ndjs
尝试另一个IDE(IDEA/Atom)或尝试使用“裸”SBT也会有所帮助,因为Eclipse可能会通过调用Scala的编译器前端来进行干扰。这似乎是一个编译器错误(我认为在Scala宏中,Breeze正在使用这些错误)。您可以尝试在项目中执行完全清理(甚至可能包括
.ivy2
文件夹-这可能是MacOS和Windows设置之间的差异),还可以将scala更新为2.11.11(甚至2.12.x),谢谢!我不得不在Eclipse中编辑更新站点,因为这里提出的Scala IDE仅限于Scala 2.11.8。现在使用最新版本的Shipping Scala 2.12.2,错误消失了:)。如果你想提出此评论作为答案,我会选择它,这将关闭问题:)。哦,等等,这很奇怪。我曾经能够编译过一次,但是在代码中稍作修改之后,错误又回来了。实际上,当我在另一个文件中更改一个数值常量时,它会崩溃。但是,每次出现问题时清理项目“解决”了问题。所以,答案的另一部分是有效的:)。这看起来像是一个编译器错误(我想是在scala宏中,因为Breeze正在使用它们)。您可以尝试在项目中执行完全清理(甚至可能包括.ivy2
文件夹-这可能是MacOS和Windows设置之间的差异),还可以将scala更新为2.11.11(甚至2.12.x),谢谢!我不得不在Eclipse中编辑更新站点,因为这里提出的Scala IDE仅限于Scala 2.11.8。现在使用最新版本的Shipping Scala 2.12.2,错误消失了:)。如果你想提出此评论作为答案,我会选择它,这将关闭问题:)。哦,等等,这很奇怪。我曾经能够编译过一次,但是在代码中稍作修改之后,错误又回来了。实际上,当我在另一个文件中更改一个数值常量时,它会崩溃。但是,每次出现问题时清理项目“解决”了问题。因此,答案的另一部分是有效的:)。