2015-05-29 130 views
0

我期待通過提供矩陣的維數m x n以及我期望擁有的非零元素的數量來預先分配R中的稀疏矩陣(使用simple_triplet_matrix)。 Matlab有函數「spalloc」(見下文),但是我還沒有能夠在R中找到相同的結果。有什麼建議嗎? S = spalloc(m,n,nzmax)創建一個大小爲m乘n的全零稀疏矩陣S,空間容納nzmax個非零值。在R中分配最大非零元素的稀疏矩陣

+0

參見包**矩陣**和函數'spMatrix'。 – Pafnucy

回答

1

儘管在R中預先分配一個傳統的密集矩陣可能是有意義的(同樣,預先分配一個規則(原子)向量而不是一個接一個地增加它的大小效率要高得多,我很確定它將工資預分配稀疏矩陣中R,在大多數情況下。 爲什麼? 對於密集矩陣,可以分配,然後分配「一塊一塊的」,例如, m[i,j] <- value 對於稀疏矩陣,但是這是非常不同:如果你做了類似 S [i,j] < - 值 內部代碼必須檢查[i,j]是否是exis (通常不爲零)。如果是這樣,它可以更改的值,但其他方式,三角形(i,j, value)需要存儲這意味着擴展當前的結構等。如果你一塊一塊地做,它是低效的......大多數情況下,如果你已經做了一些預分配或者不做分配的話。

如果,另一方面,你已經事先知道所有的[i,j]組合,其中將包含非零,你可以「預分配」,但在這種情況下, 只存儲載體i和長度的j例如nnzero。然後使用您的基礎「算法」還構建包含所有相應的value的相同長度的向量,即條目。 現在的確如@Pafnucy所建議的那樣,使用spMatrix()sparseMatrix()這兩個稍微不同的相同功能版本:根據其內容構建一個稀疏矩陣。

我很樂意進一步幫助,因爲我是Matrix包的維護者。