提高FFT的循环速度

时间:2017-01-04 15:16:46

标签: r time-series frequency

我听说在R中写循环特别慢。我有以下代码,需要运行122,000行,每行包含513列,并使用fft()函数对其进行转换:

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

我已经尝试过这样做1000个循环并且花了几分钟......有没有办法更快地完成这个循环?也许不使用循环或在C中执行它?

1 个答案:

答案 0 :(得分:3)

mvfft(记录在fft帮助页面上)旨在一次性执行此操作。很难想象你怎么能更快地做到这一点:对于一个完全符合你规模的数据集,不到三秒钟(在较旧的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 fast 。通常,它们可以在比从ASCII文件读取数据所花费的时间更短的时间内计算(因为读取中涉及的字符到数字转换比FFT中的计算花费更多时间)。因此,您的限制资源是I / O吞吐速度和RAM。但是,512个复杂值的122,000个向量“仅”占用了大约一千兆字节,所以你应该没问题。

相关问题