2016-04-06 15 views
1

Ich habe Breeze seit einigen Wochen benutzt, und ich bin nicht in der Lage, etwas zu tun, das einfach erscheint. Ich möchte zum Beispiel eine Transponierung in eine DenseMatrix, zu transformieren:Erstellen einer DenseMatrix aus einer Transponierung

val matrix = DenseMatrix((1.0, 3.5), (3.0, 2.0)) // DenseMatrix 
val meanCols = mean(matrix(::, *)) // Transpose 
val meanColsDM = meanCols.toDenseMatrix // Error: value toDenseMatrix is not a member of breeze.linalg.Transpose 

dachte ich über eine Schleife Erstellen die Transponierung in eine Anordnung umzuwandeln, um dann den DenseMatrix (1 Zeile zu erstellen, 2 cols die Matrix aus dem Beispiel unter Verwendung von) Aber ich frage mich, ob es einen einfacheren Weg gibt, dasselbe zu erreichen.

Ich muss dies tun, um dann den Mittelwert der Spalten mit anderen Matrizen zu concatene, habe ich nicht den Code in das Beispiel, da es nicht die Quelle des Problems ist.

Antwort

1

ist eine Transpose[DenseVector[Double]], die nur ein Wrapper für eine DenseVector[Double] ist. Wenn Sie das Ergebnis in einer Matrix mit einer Zeile und zwei Spalten möchten, können Sie es umsetzen wieder mit .t ein DenseVector[Double] zu bekommen und dann die mit .toDenseVector in eine Matrix konvertieren:

scala> import breeze.linalg._, breeze.stats.mean 
import breeze.linalg._ 
import breeze.stats.mean 

scala> val matrix = DenseMatrix((1.0, 3.5), (3.0, 2.0)) 
matrix: breeze.linalg.DenseMatrix[Double] = 
1.0 3.5 
3.0 2.0 

scala> val meanCols = mean(matrix(::, *)) 
meanCols: breeze.linalg.Transpose[breeze.linalg.DenseVector[Double]] = ... 

scala> val meanColsDM = meanCols.t.toDenseMatrix 
meanColsDM: breeze.linalg.DenseMatrix[Double] = 2.0 2.75 
Verwandte Themen