我有一个breeze.linalg.DenseMatrix:
breeze.linalg.DenseMatrix[Int] =
1 5 9
2 6 10
3 7 11
4 8 12
和breeze.linalg.DenseVector:
breeze.linalg.DenseVector[Int] = DenseVector(13, 14, 15)
切片允许我获取DenseMatrix的特定行但不替换/重新分配它。如何用向量替换矩阵中的一行(例如第二行)以获得如下所示的内容?
1 5 9
13 14 15
3 7 11
3 8 12
另外,有没有办法使用Spark的任何矩阵类型实现这种矩阵操作?如果是,那将更加可取。
答案 0 :(得分:1)
切片允许我获取DenseMatrix的特定行,但不能替换/重新分配
确实如此,你需要一个正确的形状 - 行切片被转置
val m = DenseMatrix((1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12))
// breeze.linalg.Transpose[breeze.linalg.DenseVector[Int]] = Transpose(DenseVector(10, 11, 12))
所以你需要匹配转置的矢量
val v = DenseVector(10, 11, 12)
m(1, ::) := v.t
m
// breeze.linalg.DenseMatrix[Int] =
// 1 5 9
// 10 11 12
// 3 7 11
// 4 8 12
另外,有没有办法使用任何Spark的矩阵类型实现这种矩阵操作?如果是,那将更加可取。
Spark ml.linalg
和mllib.linalg
不是全功能线性代数工具,主要用于支持其他ml
/ mllib
函数,因此不支持切片和修改。您必须访问基础RDD
并使用连接手动转换数据。