Создание 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 столбца с использованием матрицы из примера), но мне интересно, есть ли более простой способ получить то же самое.

Мне нужно сделать это, чтобы затем соединить среднее значение столбцов с другими матрицами, я не помещал код в пример, поскольку он не является источником проблемы.


person Armand Grillet    schedule 06.04.2016    source источник


Ответы (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
person Travis Brown    schedule 06.04.2016