scala-breeze/spark 用另一个densevector替换一行densematrix

scala-breeze/spark replace a row of a densematrix with another densevector

我有一个 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 的特定行,但不能 replace/reassign 它。如何用向量替换矩阵的其中一行(例如第二行)以获得如下所示的内容?

1  5  9  
13 14 15  
3  7  11  
3  8  12  

此外,有没有一种方法可以使用 Spark 的任何矩阵类型来实现此类矩阵操作?如果是,那就更可取了。

Slicing allows me to get a particular row of a DenseMatrix but not replace/reassign

确实如此,您只需要一个正确的形状 - 行切片已转置

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

Also, is there a way to achieve such matrix manipulations using any of Spark's matrix types? If yes, that would be much more desirable.

Spark ml.linalgmllib.linalg 不是全功能的线性代数工具,主要用于支持其他 ml / mllib 函数,因此切片和修改不是支持的。您必须访问底层 RDD 并使用连接手动转换数据。