2016-04-06 21 views
1

我几个星期以来就开始使用Breeze,我无法做一些看似简单的事情。我想转置变换为DenseMatrix,例如:从转置创建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 

我考虑从实施例2周的cols使用矩阵创建一个循环到移调转变成一个阵列,以然后创建DenseMatrix(1行, ),但我想知道是否有更简单的方法来获得同样的东西。

我需要这样做,然后与其他矩阵的列的平均值进行连接,我没有把代码放在示例中,因为它不是问题的根源。

回答

1

Transpose[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