2017-01-04 48 views
2

我聽說在R中編寫循環特別慢。我有以下的代碼需要通過122000行的每一個具有513列運行,並使用fft()功能改造他們:提高FFT的循環速度

for (i in 2:100000){ 
    Data1[i,2:513]<- fft(as.numeric(Data1[i,2:513]), inverse = TRUE)/512 
} 

我曾嘗試1000次,做這做那了幾分鐘...有一種更快的方式來做這個循環?也許不使用循環或在C中使用它?

+0

在R-help或StackOverflow上你可能會更好。你所聽到的並不是真的,但這是一個無關緊要的問題。 –

+0

感謝@mdewey,將它張貼在那裏 – Kamran

回答

3

mvfft(記錄在fft幫助頁面)旨在一次完成此操作。很難想象如何更快地做到這一點:對於數據集,只需不到3秒鐘(在舊的Xeon工作站上)就可以完成您的規模。

n.row <- 122e3 
X <- matrix(rnorm(n.row*512), n.row) 
system.time(
    Y <- mvfft(t(X), inverse=TRUE)/512 
) 

用戶系統經過

2.34 0.39 2.75

注意,在這種情況下,離散FFT具有複數值。


的FFT是快速。通常,他們可以用比從ASCII文件讀取數據花費的時間更少的時間進行計算(因爲讀取中涉及的字符到數字的轉換需要比FFT中的計算更多的時間)。因此,您的限制資源是I/O吞吐速度和RAM。但是,512個複雜值的向量只佔用一個千兆字節,所以你應該沒問題。