處理 R 的 sparse matrix 問題

2012年4月11日 星期三
遇到 sparse matrix 是很棘手的事情。原因是一不小心它會使檔案變得肥大,佔盡了記憶體資源,同時拖垮了 script 的效率。

真的是很棘手的敵人。

幸虧已經有許多人研究、提出了一些解決辦法。比如說 R 的 Matrix 套件。



了解格式

比較推薦使用的是 MatrixMarket 格式。

5  5  8
1  1  1.000e+00
2  2  1.050e+01
3  3  1.500e-02

第一行記錄的分別是 rows, columns, entries (列、行、總數)。接著每一列表示每一個 entry。可加入註解,行首以 % 標示,放在檔案的開頭處。更詳細的說明可以見此網頁


建立 sparse matrix

可參考底下的範例,試著在 R 重複一遍(鍵入 ?sparseMatrix 查更多說明)。

i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
(A <- sparseMatrix(i, j, x = x))

輸出結果

8 x 10 sparse Matrix of class "dgCMatrix"
                             
[1,] . 7 . . .  .  .  .  .  .
[2,] . . . . .  .  .  .  .  .
[3,] . . . . .  .  .  . 14  .
[4,] . . . . . 21  .  .  .  .
[5,] . . . . .  . 28  .  .  .
[6,] . . . . .  .  . 35  .  .
[7,] . . . . .  .  .  . 42  .
[8,] . . . . .  .  .  .  . 49


讀、寫外部 sparse matrix

我們可以藉著 read.table() 讀入 MatrixMarket 格式的檔案,再利用 sparseMatrix() 製作 sparse matrix。筆者相信應該還有更好的方法,讀者可以自行嘗試其他指令。底下的範例亦僅供參考。


dd <- read.table("D:/test.mtx", header=FALSE)
mm <- sparseMatrix(i = dd$i, j = dd$j, x = dd$x, dims=c(row_dim,col_dim))


如果你已經擁有了一個 sparse matrix,使用 writeMM() 可以幫您輸出成為外部檔案
data(KNex)
writeMM(KNex$mm, "mmMM.mtx")

這部份可鍵入 ?readMM 看更多說明。


0 意見:

張貼留言

嗨,我是 Seyna。歡迎您的留言 :)

 

Categories

 

© 2010 取火之路, Design by DzigNine
In collaboration with Breaking News, Trucks, SUV