在Scala中创建具有指定行数和列数的对角矩阵

时间:2018-07-09 09:57:54

标签: scala apache-spark matrix apache-spark-mllib

我有一个名为mllib的输入matrix块矩阵,例如

matrix : org.apache.spark.mllib.linalg.Matrix =
0.0  2.0  1.0  2.0
2.0  0.0  2.0  4.0
1.0  2.0  0.0  3.0
2.0  4.0  3.0  0.0

根据我的Scala代码,对角线肯定是zero。我需要matrix的对角线为1。如果我有一个diagonal matrix且对角线值为1

diagonalMatrix: org.apache.spark.mllib.linalg.Matrix =
1.0  0.0  0.0  0.0
0.0  1.0  0.0  0.0
0.0  0.0  1.0  0.0
0.0  0.0  0.0  1.0

我可以添加这些矩阵,因此diagonals的{​​{1}}将更改为1。

matrix

我们可以根据以下给出的答案创建一个matrix : org.apache.spark.mllib.linalg.Matrix = 1.0 2.0 1.0 2.0 2.0 1.0 2.0 4.0 1.0 2.0 1.0 3.0 2.0 4.0 3.0 1.0 ,其中指定数量的diagonal matrixrowscolumnsdiagonals。但是由于1rows的数量太大,我需要一个columns。还是有更好的解决方案将对角线从optimized solutionmatrix

1 个答案:

答案 0 :(得分:1)

val nR = 5
val nC = 5

val seq = for {
  i <- 0 until nC
  j <- 0 until nR
  v = if (i == j) 1d else 0d
} yield v

val matrix = DenseMatrix(nR, nC, seq.toArray)