我有一個從R的Matrix包創建的稀疏矩陣。我想迭代矩陣中的每個條目並執行一個操作,將結果保存在與原始矩陣具有相同索引的另一個稀疏矩陣中。R:映射稀疏矩陣中所有條目的方法
例如,假設我有稀疏矩陣A:
1 . 1
2 . .
. . 4
ColSums會是什麼樣子:
3 . 5
RowSums會是什麼樣子:
2
2
4
我想迭代A並執行此操作
(1,1) > 3*2
(2,1) > 2*3
(1,3) > 2*5
(3,3) > 4*5
創建B:
6 . 10
6 . .
. . 20
我怎麼會去一個量化的方式這樣做呢?
我認爲函數foo看起來像:
B=fooMap(A,fun)
和樂趣會是什麼樣子:
fun(row,col) = RowSums(row) * ColSums(col)
什麼fooMap?
編輯:
我用flodel的解決方案。它使用匯總將稀疏矩陣轉換爲i,j,x數據幀,然後與&朋友一起使用來對該幀執行操作,然後將結果轉換回稀疏矩陣。使用這種技術,with/within運算符是fooMap;稀疏矩陣必須首先轉換爲i,j,x數據幀,以便可以使用/ within。
這是解決這個特殊問題的單線程。
B = with(summary(A), sparseMatrix(i=i, j=j, x = rowSums(A)[i] * colSums(A)[j]))
+1 - 這是一個好主意。 –
內看起來非常強大。那麼在內部,你已經讀取了對象中所有列的訪問權限,它們的框架名稱被引用了嗎?這是用來構建原始對象的稍微修改版本,但作爲一個新的對象,不共享任何相同的內存,是嗎? –
是的,這是正確的:-) – flodel