0

私は Scala を初めて使用し、一見簡単な問題に頭を悩ませています。私は Scala ライブラリを使用しており、 (可変) を取得して結果を行列に入れるbreeze必要があります。array bufferこれは...簡単なはずですが?Scala は非常に型キャストされbreezeているため、DenseVector を作成するときにどのデータ型を使用するかについて、非常にうるさいようです。これは単なるプロトタイプ コードですが、解決策を考え出すのを手伝ってくれる人はいますか? 今、私は次のようなものを持っています...

//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 に設定することができます。次のようなこともできます M(0, 0 to 2) := DenseVector(1, 2, 3) 。最初の行を 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に正常に変更します。そして、それは ArrayBuffer ではなく List です。

ArrayBuffer からデータ型を変更しても構わないと思っていますが、これにアプローチする方法がまったくわかりません... 行列の値を 1 つずつ更新してみることができますが、コードを作成するのは非常に面倒なようです (?)。

注: 私は Python プログラマーであり、配列の使用numpyと配列の提供に慣れています。breezeドキュメントには、他のデータ型の例が十分に提供されていないため、これをまだ理解できていません。ありがとう!

4

1 に答える 1

2

Breeze は、型に対する選り好みに加えて、ベクトル形状についてかなりうるさいです: DenseVectors は列ベクトルですが、転置された DenseVector を期待する行のサブセットに割り当てようとしています:

M(0, 0 to 2) := dummyVec.t
于 2017-01-10T00:16:39.187 に答える