ND4S 和 Breeze 中的链式索引会产生 Scala 编译器错误:
var m = Nd4j.create(2, 3)
var a = m(0, ->)
var b = a(0)
var c = m(0, ->)(0)
前两个工作,但第三个产生:
方法 apply 的参数不足:(隐式 ev:org.nd4s.NDArrayEvidence[org.nd4j.linalg.api.ndarray.INDArray,B],隐式 ev2:scala.reflect.Manifest[B])org.nd4j.linalg。 RichINDArray 类中的 api.ndarray.INDArray。
我尝试使用(0, 0)
而不是,(0)
因为它仍然是 2d,但这没关系。以及许多额外括号的变体。
这是 Scala 解析器认为它是其他构造还是 ND4S 中的错误?是否有一些可以使链接工作的解决方法语法?
编辑:
微风下:
var m = DenseMatrix.zeros[Int](5,5)
var a = m(0, ::)
var b = a(0)
var c = m(0, ::)(0)
a 和 b 工作,但 c 产生此编译器错误:
类型不匹配; 发现:需要 Int(0):breeze.linalg.support.CanSlice2[breeze.linalg.DenseMatrix[Int],Int,collection.immutable.::.type,?]
也许这是解析为 curried 函数调用,或者宏以一种在这里不起作用的方式扩展。虽然我猜一个人永远不需要链接索引,因为m(0, 0)
上面的工作和任何索引都可以折叠,对于在这些情况下欺骗 Scala 的一般情况是否有一些解决方案?
此外,链接适用于多维数组:
var n = Array.ofDim[Double](2, 3)
var x = n(0)(0)