2017-01-09 76 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