2017-01-09 48 views
0

我是新来的斯卡拉,我对看似简单的问题有一个心理障碍。我正在使用Scala库breeze并需要采取array buffer(可变)并将结果放入矩阵中。这...应该很简单,但?斯卡拉是非常疯狂类型流星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。 这就是一个List,甚至不是一个ArrayBuffer。

我愿意改变ArrayBuffer的数据类型,但只是不知道如何处理这个...可以尝试逐个更新矩阵值,但这似乎是非常哈克代码(?)。

注意:我是一个Python程序员,习惯于使用numpy并给它一个数组。 breeze文档没有提供足够的其他数据类型的例子,以至于我能够弄清楚这一点。 谢谢!

回答

2

微风是,除了pickiness过的类型,很挑剔的矢量形状:DenseVectors是列向量,但是你想分配给行的一个子集,它需要一个换位DenseVector:

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