【发布时间】:2018-07-27 16:07:39
【问题描述】:
我正在尝试使用 R 按列排列矩阵。 但是,它需要很长时间(矩阵是 68k x 32k 整数)。
我想并行执行(因为每一列都是独立排列的)。我怎样才能实现它?它应该与 R 中的 embarrassingly parallel for 有关,但我没有找到解决方案。
目前,我的功能如下:
permMTX <- function(x) {
nr <- nrow(x)
nc <- ncol(x)
# I'd like to parallelize this for, since each
# column can be permuted independently
for (i in 1:nc) {
x[,i] <- x[sample(nr),i]
}
x
}
【问题讨论】:
-
x真的意味着matrix吗?您将函数命名为permDF,所以我只是想确保它不是data.frame -
是的,我会更正函数的名称。谢谢。
-
不同的看法:做完
x_p <- permMTX(x)之后,你要在x_p上做什么计算/操作? -
每次置换时,都会创建一个新的 8 GiB 矩阵。如果您置换 B 次并且 B 很大,那么这就是大量的内存分配(以及垃圾收集器的释放工作)。如果您在最后计算汇总统计信息,有时可以重写操作套件(“推迟排列”),这样您就可以避免创建 B 矩阵。这并不简单,也不明显,但在某些情况下是可能的。
-
更多思考:为了确保在进行并行处理时获得真正的随机样本,您必须利用并行安全随机数生成 (RNG)。 R 为此提供了
RNGkind("L'Ecuyer-CMRG")和parallel::nextRNGStream等。不幸的是,这会给并行编排本身带来的任何开销带来额外的开销。
标签: r for-loop matrix parallel-processing permutation