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

Create a Diagonal Matrix with specified number of rows and columns in Scala

我有一个输入 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

我可以添加那些矩阵,所以 matrixdiagonals 将更改为 1。

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 matrix,指定数量的 rowscolumnsdiagonals 作为 1。但是由于 rowscolumns 的数量太大,我需要一个 optimized solution。或者有没有更好的解决方案来制作 matrix1 的对角线?

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)