Scala Breeze扩展矩阵

时间:2016-12-23 09:01:28

标签: scala octave scala-breeze

在Octave / Matlab中,我可以扩展单位矩阵,如下所示。

>> I = eye(3)
I =
Diagonal Matrix
  1   0   0
  0   1   0
  0   0   1

>> A = [ 3 2 3 2 2 1 3 2 2 1 ]

>> E = I(:, A)
E =
   0   0   0   0   0   1   0   0   0   1
   0   1   0   1   1   0   0   1   1   0
   1   0   1   0   0   0   1   0   0   0

如何使用Scala / Breeze实现相同的功能(即从A中获取E,可能使用I)?

1 个答案:

答案 0 :(得分:2)

知道了。实际上与Octave非常相似。

scala> val I = DenseMatrix.eye[Int](3)
I: breeze.linalg.DenseMatrix[Int] =
1  0  0
0  1  0
0  0  1

scala> val A = DenseMatrix(2, 1, 2, 1, 1, 0, 2, 1, 1, 0) // zero based in breeze

scala> I(::, A.toArray.toSeq)
res26: breeze.linalg.SliceMatrix[Int,Int,Int] =
0  0  0  0  0  1  0  0  0  1
0  1  0  1  1  0  0  1  1  0
1  0  1  0  0  0  1  0  0  0

警告是:

  • 矩阵必须包含整数
  • 索引是基于0的(而不是基于Octave / Matlab的1)