Matrix scala-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

我想乘两个矩阵。A*B很好用。但是我真正想要的是A.t*B,但是在转置A之后,结果变成了转置[Matrix[Double],而不是矩阵[Double]。因此,编译器拒绝该操作。然而,在数学上,一个矩阵的转置是另一个矩阵,用另一个矩阵乘以它应该是完全可以的。在breeze中如何正确地实现这一点?

A.t.asInstanceOf[DenseMatrix[Double]]实现了这一点。

在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
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]