Создание DenseMatrix из транспонирования
Я начал использовать 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 столбца с использованием матрицы из примера), но мне интересно, есть ли более простой способ получить то же самое.
Мне нужно сделать это, чтобы затем связать среднее значение столбцов с другими матрицами, я не поместил код в пример, так как он не является источником проблемы.
1 ответ
meanCols
это 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