【发布时间】:2026-02-10 08:25:01
【问题描述】:
我的代码非常适合我的目的(它读取一些具有特定模式的文件,读取每个文件中的矩阵并使用每个文件对计算一些东西......最终输出是一个具有相同大小的矩阵文件编号),看起来像这样:
m<- 100
output<- matrix(0, m, m)
lista<- list.files(pattern = "q")
listan<- as.matrix(lista)
n <- nrow(listan)
for (i in 1:n) {
AA <- read.table((listan[i,]), header = FALSE)
A<- as.matrix(AA)
dVarX <- sqrt(mean(A * A))
for (j in i:n) {
BB <- read.table ((listan[j,]), header = FALSE)
B<- as.matrix(BB)
V <- sqrt (dVarX * (sqrt(mean(B * B))))
output[i,j] <- (sqrt(mean(A * B))) / V
}
}
我的问题是它需要很多时间(我有大约 5000 个矩阵,这意味着 5000x5000 个循环)。 我想并行化,但我需要一些帮助! 期待您的好意建议!
提前谢谢你!
加布
【问题讨论】:
-
触摸磁盘很慢。想想你从磁盘中读取每个矩阵的次数。为什么不每个矩阵只做一次?
-
要添加到@joran 的评论中,
?read.table的 内存使用 部分明确表示,“使用scan代替矩阵。” -
...这只是从磁盘部分读取。您还为每个矩阵复制了
sqrt(mean(B*B))的计算。并行化这种低效的代码就像试图通过从家跑到汽车而不是步行来加快通勤速度。 -
@joran 你说得对!!..但我在使用 R (圣诞节前开始!)和编程方面非常新……这就是我需要很多帮助的原因!无论如何,我写了一个命令,只能在创建一个列表时从磁盘读取每个矩阵......但这个列表对于我由 5000 个矩阵组成的 RAM(12GB)来说太大了。该命令是用 llply 完成的。
标签: r performance file-io parallel-processing