我是Scala(Python背景)的新手,並試圖爲我的稀疏數據實現一個Quadtree,並試圖使用Breeze
這樣做(儘管如果你有更好的建議,我完全接受它)。我需要知道如何在(x,y)處更新矩陣,而無需簡單地通過i <- 0 until matrix.rows
遞歸,因爲我沒有所有行和列的值,我只有特定的xs和YS。如果這還不清楚這裏就是我的意思是:在breeze
文檔,你通常會看到這樣的事情用x,y座標更新scala微風矩陣(不是行和列的長度)
val r = new scala.util.Random(100)
for(i <-0 until Matrix.rows)
for(j <- 0 until Matrix.cols)
Matrix(i,j) = r.nextInt
return Matrix
這是罰款和花花公子,如果我有在矩陣中的每個值的值,但我不知道。相反,我正在處理的是這樣的事情。
val points: Array[Double] = Array(3.0, 5.0, 8.0)
val xs: Array[Double] = Array(2.0, 5.0, 6.0)
val ys: Array[Double] = Array(3.0, 4.0, 6.0)
,我想matrix(2,3) = 3.0
如果我知道我的矩陣應該是一個6x6的矩陣DenseMatrix[Double](6,6)
。
假設我開始零矩陣(DenseMatrix.zeros(6,6)
)我怎麼能插入我的points
使用我xs
和ys
而不是.rows
和.cols
?
我已經試過這樣: (其中emptym
是零的6×6矩陣)
val matrix = for {
| x <- xs
| y <- ys
| p <- points
| } yield (emptym(x.toInt,y.toInt) = p)
這給了我各種錯誤:/
我想也許我可以做一些這樣做因爲我想爲此返回一個val,但是我足夠新到scala,因此我無法完全弄清楚如何做到這一點。
請幫我弄清楚這一點。謝謝! :)
編輯 - 理想情況下,我希望更多的FP解決方案,不必循環矩陣和更新它。我想創建一個新的矩陣。我想這樣的事情,但不能得到它的工作:
val newMatrix = oldMatrix.map(xs, ys, points => oldMatirx(x,y) = point)
感謝您的響應!!我試了一下,它工作:)。這個答案的工作,但它的迭代,我正在尋找更多的功能編程選項。這不能用scala微風來完成,你覺得呢? – SnarkShark