2017-01-09 14 views
0

私はScalaを初めて使いました。私は一見簡単な問題で精神的なブロックを持っています。私はScalaライブラリbreezeを使用しており、array buffer(変更可能)をとり、結果を行列に入れる必要があります。これは...シンプルにするべきですが? Scalaは非常に微妙に型キャストされていますbreezeはDenseVectorを作成するときにどのようなデータ型を取るのか本当に不安です。これは単なるプロトタイプコードですが、誰も私が解決策を思いつくのを助けることができますか?設定 M(0, 0 to 2) := DenseVector(1, 2, 3) : は、今私は風にScalaライブラリのブリーズを使って行列を埋めてください

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

は、あなたがこの方法を M(0,0) = 100のようなものを行うと100に最初の値を設定することができます...のようなものを持っている、 はまた、もののように行うことができます1の最初の行、2、3 しかし、私は...それは何かなどを行うために

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 

を取得し、成功した1、2,3に最初の行を変更することはできません。 それはListであり、ArrayBufferでさえありません。

ArrayBufferからデータ型を変更しようとしていますが、これにアプローチする方法がわかりません...マトリックス値を1つずつ更新しようとする可能性がありますが、コード化するのは非常にハッキーです(?)。

注:私はnumpyを使用し、それに配列を与えることに慣れているPythonプログラマーです。 breezeのドキュメントでは、私がこれをまだ把握できていない他のデータ型の例は十分ではありません。 ありがとう!

答えて

2

ブリーズは、種類を超えるpickinessに加えて、ベクターシェイプについてかなりうるさいです:DenseVectorsは列ベクトルですが、あなたは転置DenseVectorを期待していた行のサブセットに割り当てるしようとしている。

M(0, 0 to 2) := dummyVec.t 
関連する問題