scala-breeze / spark用另一个密集向量替换一排密集矩阵

时间:2018-01-11 12:06:39

标签: scala apache-spark breeze apache-spark-ml scala-breeze

我有一个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的任何矩阵类型实现这种矩阵操作?如果是,那将更加可取。

1 个答案:

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