我面臨以下問題:我需要一個大矩陣的多個子集。其實我只需要視圖作爲另一個函數f()的輸入,所以我不需要改變這些值。然而,看起來,R對於這項任務來說非常緩慢,或者我做錯了什麼(這看起來更可能)。玩具例子說明了只需要多少時間來選擇列,然後在另一個函數中使用它們(在這個玩具例子中是基本函數sum())。作爲「基準」,我還測試了總結整個矩陣的計算時間,這是驚人的更快。我也嘗試過使用package ref,但是無法獲得任何性能提升。 所以關鍵的問題是如何對矩陣進行子集化而不復制它?我感謝任何幫助,謝謝!R中矩陣的快速子集問題
library(microbenchmark)
library(ref)
m0 <- matrix(rnorm(10^6), 10^3, 10^3)
r0 <- refdata(m0)
microbenchmark(m0[, 1:900], sum(m0[, 1:900]), sum(r0[,1:900]), sum(m0))
Unit: milliseconds expr min lq mean median uq m0[, 1:900] 10.087403 12.350751 16.697078 18.307475 19.054157 sum(m0[, 1:900]) 11.067583 13.341860 17.286514 19.123748 19.990661 sum(r0[, 1:900]) 11.066164 13.194244 16.869551 19.204434 20.004034 sum(m0) 1.015247 1.040574 1.059872 1.049513 1.067142 max neval 58.238217 100 25.664729 100 23.505308 100 1.233617 100
總結整個矩陣的基準任務需要1.059872毫秒,比其他功能快約16倍。
我得到一個錯誤時,我嘗試你的例子:'r0 [,1:900]中的錯誤:維數不正確# – 5th
'庫('ref')'修復了它 – dvantwisk
好吧,那麼解決方案的標準是什麼?它是否必須比現在做的更快,還是比總結整個矩陣要快? –