Бриз Вектор для преобразования матрицы
Есть ли способ преобразовать вектор ветер в матрицу ветер размер строки / столбца 1? Я новичок в Scala и в прошлом находил весьма полезным писать функции, которые беспрепятственно обрабатывают векторы и матрицы (в основном в Matlab). Например, я бы хотел, чтобы func в следующем коде принимал в качестве входных данных либо subsetMatrix, либо subsetVector.
val dummyMatrix = DenseMatrix.eye[Double](3)
val subsetMatrix = dummyMatrix(::,0 to 2)
val subsetVector = dummyMatrix(::,1)
def func(X1: DenseMatrix[Double]): Int = {
// Some operation on X1
}
2 ответа
Решение
Использовать asDenseMatrix
scala> import breeze.linalg._
import breeze.linalg._
scala> val dv = DenseVector(1, 2, 3)
dv: breeze.linalg.DenseVector[Int] = DenseVector(1, 2, 3)
scala> dv.asDenseMatrix
res0: breeze.linalg.DenseMatrix[Int] = 1 2 3
scala> (res0.rows, res0.cols)
res1: (Int, Int) = (1,3)
scala>
Лучшее решение часто заключается в использовании нарезки диапазона при создании subsetVector
во-первых (если вы хотите, чтобы это был матричный тип Nx1, а не векторный тип длины N). Например:
val subsetSingleColumnMatrix = dummyMatrix(::, 0 until 1)
такие как:
scala> val z = DenseMatrix.rand[Double](3, 3)
z: breeze.linalg.DenseMatrix[Double] =
0.9523399908830603 0.5140714248369589 0.23363266806760596
0.27656335841627455 0.2143774018347031 0.3116275714282011
0.020435608706944386 0.13954770594758292 0.5493312961226657
scala> z(::, 0 until 1)
res47: breeze.linalg.DenseMatrix[Double] =
0.9523399908830603
0.27656335841627455
0.020435608706944386