scala breeze通过转置乘法矩阵

时间:2016-12-04 06:46:59

标签: matrix breeze multiplication

我想要乘以两个矩阵。 A * B工作正常。但我真正想要的是A.t * B.但是在转置A后,结果变为Transpose [Matrix [Double]]而不是Matrix [Double]。结果,编译器拒绝该操作。然而,在数学上,矩阵的转置是另一个矩阵,将它乘以另一个矩阵应该是完全可以的。如何在微风中正确完成?

2 个答案:

答案 0 :(得分:1)

在Breeze中使用纯矩阵类型时,我遇到了类似的问题,例如:

def buildMatrix(): Matrix[Double] = {
  DenseMatrix((1.0, 2.0, 3.0), (4.0, 5.0, 6.0))
}

val m = buildMatrix()
val t = m.t
m * t

给我编译器错误Error:(13, 69) could not find implicit value for parameter op: breeze.linalg.operators.OpMulMatrix.Impl2[breeze.linalg.Matrix[Double],breeze.linalg.Transpose[breeze.linalg.Matrix[Double]],That]

但是,如果我确定要转置的矩阵是DenseMatrix,如下所示:

val m = buildMatrix().toDenseMatrix

然后*运算符可以正常工作。

答案 1 :(得分:0)

A.t.asInstanceOf [DenseMatrix [Double]]成功了。