从转置创建DenseMatrix

时间:2016-04-06 20:46:57

标签: scala scala-breeze

我开始使用Breeze几周了,我无法做一些看似简单的事情。我想将Transpose变换为DenseMatrix,例如:

val matrix = DenseMatrix((1.0, 3.5), (3.0, 2.0)) // DenseMatrix
val meanCols = mean(matrix(::, *)) // Transpose
val meanColsDM = meanCols.toDenseMatrix // Error: value toDenseMatrix is not a member of breeze.linalg.Transpose

我考虑过创建一个循环来将Transpose变换为一个数组,然后使用示例中的矩阵创建DenseMatrix(1行,2个cols),但我想知道是否有更简单的方法可以获得相同的东西。< / p>

我需要这样做才能将列的平均值与其他矩阵连在一起,我没有将代码放在示例中,因为它不是问题的根源。

1 个答案:

答案 0 :(得分:1)

meanColsTranspose[DenseVector[Double]],它只是DenseVector[Double]的包装器。如果您希望将结果放在包含一行和两列的矩阵中,则可以使用.t再次转置它以获取DenseVector[Double],然后将其转换为.toDenseVector的矩阵:

scala> import breeze.linalg._, breeze.stats.mean
import breeze.linalg._
import breeze.stats.mean

scala> val matrix = DenseMatrix((1.0, 3.5), (3.0, 2.0))
matrix: breeze.linalg.DenseMatrix[Double] =
1.0  3.5
3.0  2.0

scala> val meanCols = mean(matrix(::, *))
meanCols: breeze.linalg.Transpose[breeze.linalg.DenseVector[Double]] = ...

scala> val meanColsDM = meanCols.t.toDenseMatrix
meanColsDM: breeze.linalg.DenseMatrix[Double] = 2.0  2.75
相关问题