无法访问差异函数内的矩阵行
Cant Access Matrix Rows Inside DiffFunction
我正在尝试 运行 这个简单的程序:
object Test {
def foo(args: (Double, Double, Double)*) = {
val x = DenseMatrix(args.toList :_*)
val r = DenseVector(5.0, 5.0, 0.0)
println(sum(x(*, ::) - r)) // works
val func = new DiffFunction[DenseVector[Double]] {
def calculate(r: DenseVector[Double]) = {
sum(x(*, ::) - r) // Doesn't work
}
}
}
def main(args: Array[String]) {
foo((0.0, 0.0, 0.0), (5.0, 5.0, 0.0), (10.0, 0.0, 0.0))
}
}
但是我得到以下错误:
Missing arguments for method *(B)(OpMulMatrix.Impl2[TT, B, That])
Missing arguments for method *(B)(OpMulMatrix.Impl2[TT, B, That])
Cannot resolve symbol *
看来我不能使用运算符 * 来引用 DiffFunction 中矩阵的每一行。
为什么在 DiffFunction 外部使用运算符 * 访问矩阵行并从中减去向量有效,但在 DiffFunction 内部却不行?
所以,这很不幸,我以前从未见过。发生的事情是 DiffFunction 实际上实现了 ImmutableNumericOps,这意味着它具有所有各种运算符(包括 def *
)作为成员。这意味着当它在 DiffFunction 的 class 主体中看到 *
时,它解析为该方法而不是名为 *
.
的对象
要修复它,您必须说 sum(x(breeze.linalg.*, ::) - r)
我正在尝试 运行 这个简单的程序:
object Test {
def foo(args: (Double, Double, Double)*) = {
val x = DenseMatrix(args.toList :_*)
val r = DenseVector(5.0, 5.0, 0.0)
println(sum(x(*, ::) - r)) // works
val func = new DiffFunction[DenseVector[Double]] {
def calculate(r: DenseVector[Double]) = {
sum(x(*, ::) - r) // Doesn't work
}
}
}
def main(args: Array[String]) {
foo((0.0, 0.0, 0.0), (5.0, 5.0, 0.0), (10.0, 0.0, 0.0))
}
}
但是我得到以下错误:
Missing arguments for method *(B)(OpMulMatrix.Impl2[TT, B, That])
Missing arguments for method *(B)(OpMulMatrix.Impl2[TT, B, That])
Cannot resolve symbol *
看来我不能使用运算符 * 来引用 DiffFunction 中矩阵的每一行。
为什么在 DiffFunction 外部使用运算符 * 访问矩阵行并从中减去向量有效,但在 DiffFunction 内部却不行?
所以,这很不幸,我以前从未见过。发生的事情是 DiffFunction 实际上实现了 ImmutableNumericOps,这意味着它具有所有各种运算符(包括 def *
)作为成员。这意味着当它在 DiffFunction 的 class 主体中看到 *
时,它解析为该方法而不是名为 *
.
要修复它,您必须说 sum(x(breeze.linalg.*, ::) - r)