2017-01-09 2 views
0

Je suis nouveau à Scala et j'ai un blocage mental sur un problème apparemment facile. J'utilise la bibliothèque Scala breeze et j'ai besoin de prendre un array buffer (mutable) et de mettre les résultats dans une matrice. Cela ... devrait être simple mais? Scala est si follement de type casté breeze semble vraiment pointilleux sur les types de données qu'il prendra lors de la création d'un DenseVector. Ceci est juste un code prototype, mais quelqu'un peut-il m'aider à trouver une solution? En ce moment j'ai quelque chose comme ...remplir une matrice avec la bibliothèque Scala 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) 

En brise vous pouvez faire des choses comme M(0,0) = 100 et définissez la première valeur à 100 cette façon, Vous pouvez aussi faire des choses comme: M(0, 0 to 2) := DenseVector(1, 2, 3) qui définit la première ligne à 1, 2, 3 Mais je ne peux pas le faire faire quelque chose comme ...

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 

et changer avec succès la première ligne au 1, 2,3. Et c'est avec une liste, même pas un ArrayBuffer. Je suis prêt à changer de type de données à partir de ArrayBuffer, mais je ne sais pas comment aborder cela ... pourrait essayer de mettre à jour les valeurs de la matrice une par une, mais cela semble être très difficile à coder (?).

Note: Je suis un programmeur Python qui est habitué à utiliser numpy et à lui donner des tableaux. La documentation breeze ne fournit pas suffisamment d'exemples avec d'autres types de données pour que je puisse comprendre cela. Merci!

Répondre

2

Breeze est, en plus de pickiness sur les types, assez pointilleux sur la forme de vecteur: DenseVectors sont des vecteurs colonne, mais vous essayez d'attribuer à un sous-ensemble d'une ligne qui attend une DenseVector transposée:

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