我有超过 10000 个 csv 文件,我需要对每个 csv 文件的每一列进行快速傅里叶变换。我可以访问 1000 个核心。最快的方法应该是什么?
目前我有一个 for 循环按顺序读取每个文件并使用apply(data, 2, FFT)
功能。我该怎么做呢?我尝试做clusterapply(1:10000, cl, transformation)
。在转换函数中,我读了csv。完成所有阅读仍然需要很长时间。你们有人知道更快的方法吗?
我认为最快的方法是mclapply
and fread
.
#Bring in libraries
library(parallel)
library(data.table)
#Find all csv files in your folder
csv.list = list.files(pattern="*.csv")
#Create function to read in data and perform fft on each column
read.fft <- function(x) {
data <- fread(x)
result <- data[, lapply(.SD,fft)]
return(result)
}
#Apply function using multiple cores
all.results <- mclapply(csv.list,read.fft,mc.cores=10)
如果您对每个数据集进行随机样本有意义,我强烈建议更改read.fft
函数来使用shuf
命令。它会花费你相当多的阅读时间。
#Create function to read in data and perform fft
read.fft <- function(x) {
data <- fread(paste0("shuf -n 10000",x)) #Takes random sample of 10000 rows
result <- data[, lapply(.SD,fft)]
return(result)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)