2014-02-16 199 views
0

假設要慢很多我這樣做:寫入大型矩陣比正常

m <- matrix(0, nrow = 20, ncol = 3) 

system.time(m[1, 1:3] <- c(1,1,1)) 

這取值爲0秒。

現在我這樣做:

m <- matrix(0, nrow = 10000000, ncol = 3) 

system.time(m[1, 1:3] <- c(1,1,1)) 

這大約需要0.47秒我的系統上。

我需要填寫約850萬行的矩陣,因此每個0.47秒不是一個選項。有沒有辦法解決?除了以後創建許多更小的子矩陣和rbinding?

謝謝!

+1

你是否需要以這種方式逐行填充矩陣? (PS:在我的系統上只需要〜0.03秒的系統時間) – jbaums

+0

是的。對於每個日期/項目組合,我需要執行滾動迴歸。日期的數量*項目的數量大約是8.5M。我已經優化了Rcpp中的迴歸,現在看來分配值是瓶頸:( 即使在0.03秒,也就是71個小時 – badmax

+0

因此,您稱之爲迴歸函數〜8.5M次,每次它返回一個長度爲3的向量?如果是這樣的話,可能會考慮類似'parSapply',這會通過利用多個內核來節省一些時間,並且可以一次返回整個矩陣 – jbaums

回答

0

開始一個新的R會話之後:

m <- matrix(0, nrow = 10000000, ncol = 3) 

system.time(m[1, 1:3] <- c(1,1,1)) 
# User  System  elapsed 
# 0   0   0 

n <- m 
system.time(m[1, 1:3] <- c(1,1,1)) 
# User  System  elapsed 
# 0.074  0.061  0.135 

首次m到位被修改。 mn引用第二次複製。

This question可能是有趣的。但是,如果您進行滾動迴歸,則應首先查看它是否在某些軟件包中實現。如果你想在Rcpp中做到這一點,你應該在Rcpp中完成整個循環,而不是分配給8.5M次。