Создание 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
Другие вопросы по тегам