2016-12-23 2 views
1

In Octave/Matlab kann ich eine Identitätsmatrix wie folgt erweitern.Scala Breeze Erweiterungsmatrix

>> 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 

Wie kann ich das Gleiche erreichen (das heißt E von A erhalten, möglicherweise ich verwenden) mit Scala/Breeze?

Antwort

2

Verstanden. Eigentlich Octave sehr ähnlich.

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 

Die Einschränkungen sind:

  • die Matrizen Integers
  • Indizes 0 basierend enthalten muss (im Gegensatz zu 1, bezogen in Octave/Matlab)
Verwandte Themen