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.linalg
和 mllib.linalg
不是全功能的线性代数工具,主要用于支持其他 ml
/ mllib
函数,因此切片和修改不是支持的。您必须访问底层 RDD
并使用连接手动转换数据。
我有一个 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.linalg
和 mllib.linalg
不是全功能的线性代数工具,主要用于支持其他 ml
/ mllib
函数,因此切片和修改不是支持的。您必须访问底层 RDD
并使用连接手动转换数据。