2017-01-09 11 views
0

Ich bin neu in Scala und ich habe eine mentale Blockade auf ein scheinbar einfaches Problem. Ich benutze die Scala-Bibliothek breeze und muss eine array buffer (veränderbar) nehmen und die Ergebnisse in eine Matrix setzen. Das ... sollte einfach sein aber? Scala ist so wahnsinnig typgegossen breeze scheint wirklich wählerisch darüber, welche Datentypen es bei der Erstellung eines DenseVectors braucht. Dies ist nur ein Prototyp-Code, aber kann mir jemand helfen, eine Lösung zu finden? Im Moment habe ich so etwas wie ...Füllen einer Matrix mit Scala Bibliothek Brise

//9 elements that need to go into a 3x3 matrix, 1-3 as top row, 4-6 as middle row, etc) 
val numbersForMatrix: ArrayBuffer[Double] = (1, 2, 3, 4, 5, 6, 7, 8, 9) 
//the empty 3x3 matrix 
var M: breeze.linalg.DenseMatrix[Double] = DenseMatrix.zeros(3,3) 

In Brise Sie Sachen wie M(0,0) = 100 und stellen Sie den ersten Wert auf 100 auf diese Weise tun können, können Sie tun auch Sachen wie: M(0, 0 to 2) := DenseVector(1, 2, 3) , die die Sets erste Reihe 1, 2, 3 Aber ich kann es nicht so etwas wie zu tun bekommen ...

var dummyList: List[Double] = List(1, 2, 3) //this works 
var dummyVec = DenseVector[Double](dummyList) //this works 
M(0, 0 to 2) := dummyVec //this does not work 

und erfolgreich die erste Reihe zum 1 ändern, 2,3. Und das ist mit einer Liste, nicht einmal ein ArrayBuffer.

Bin bereit, die Datentypen von ArrayBuffer zu ändern, aber einfach nicht sicher, wie man das überhaupt angehen könnte ... könnte versuchen, die Matrixwerte einzeln zu aktualisieren, aber das scheint VERY hacky zu sein, um (?) Zu kodieren.

Hinweis: Ich bin ein Python-Programmierer, der gewohnt ist, numpy zu verwenden und es nur Arrays zu geben. Die breeze Dokumentation liefert nicht genügend Beispiele mit anderen Datentypen, um das herauszufinden. Danke!

Antwort

2

Breeze ist, zusätzlich zu pickiness über Typen, ziemlich pingelig Vektor Form: DenseVectors Spaltenvektoren sind, aber Sie versuchen, auf eine Teilmenge einer Zeile zuweisen, die eine transponierte DenseVector erwartet:

M(0, 0 to 2) := dummyVec.t 
Verwandte Themen