Matrix scala-breeze转置乘矩阵
我想乘两个矩阵。A*B很好用。但是我真正想要的是A.t*B,但是在转置A之后,结果变成了转置[Matrix[Double],而不是矩阵[Double]。因此,编译器拒绝该操作。然而,在数学上,一个矩阵的转置是另一个矩阵,用另一个矩阵乘以它应该是完全可以的。在breeze中如何正确地实现这一点?A.t.asInstanceOf[DenseMatrix[Double]]实现了这一点。在breeze中使用纯矩阵类型时,我遇到了类似的问题,例如:Matrix scala-breeze转置乘矩阵,matrix,breeze,multiplication,Matrix,Breeze,Multiplication,我想乘两个矩阵。A*B很好用。但是我真正想要的是A.t*B,但是在转置A之后,结果变成了转置[Matrix[Double],而不是矩阵[Double]。因此,编译器拒绝该操作。然而,在数学上,一个矩阵的转置是另一个矩阵,用另一个矩阵乘以它应该是完全可以的。在breeze中如何正确地实现这一点?A.t.asInstanceOf[DenseMatrix[Double]]实现了这一点。在breeze中使用纯矩阵类型时,我遇到了类似的问题,例如: def buildMatrix(): Matrix[Do
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
val m = buildMatrix().toDenseMatrix
给我编译器错误错误:(13,69)找不到参数op的隐式值:breeze.linalg.operators.OpMulMatrix.Impl2[breeze.linalg.Matrix[Double],breeze.linalg.Transpose[breeze.linalg.Matrix[Double],That]
但是如果我确定我转置的矩阵是一个密度矩阵,如下所示:
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
val m = buildMatrix().toDenseMatrix
然后,
*
操作符工作正常。如果A
具有类型DenseMatrix[Double]
,那么A.t
也应该是DenseMatrix[Double]
。因此,如果您知道A
具有运行时类型DenseMatix[Double]
(您显然是这样做的),那么您只需使A
具有编译时类型DenseMatix[Double]
。这将允许您在不使用强制转换的情况下执行A.t*B
。在强制转换之前我仍然有这个问题。它是否有编译时类型DenseMatrix[Double]
?我尝试了A.t
(其中A
有编译时类型DenseMatrix[Double]
),结果是另一个DenseMatrix[Double]
,而如果A
有编译时类型Matrix[Double]
,则A.t
会导致transpose[Matrix[Double]
。