gpt4 book ai didi

r - 在R中对大型矩阵的每一行进行排序的最快方法

转载 作者:行者123 更新时间:2023-12-04 06:07:27 25 4
gpt4 key购买 nike

我有一个大矩阵:

set.seed(1)
a <- matrix(runif(9e+07),ncol=300)

我想对矩阵中的每一行进行排序:
> system.time(sorted <- t(apply(a,1,sort)))
user system elapsed
42.48 3.40 45.88

我有很多RAM可以使用,但是我想有一种更快的方法来执行此操作。

最佳答案

好吧,我不知道有多少种方法可以在R中更快地排序,而问题是您只对300个值进行了排序,但是却进行了很多次。不过,您可以通过直接调用sort.int并使用method='quick'来获得一些额外的性能:

set.seed(1)
a <- matrix(runif(9e+07),ncol=300)

# Your original code
system.time(sorted <- t(apply(a,1,sort))) # 31 secs

# sort.int with method='quick'
system.time(sorted2 <- t(apply(a,1,sort.int, method='quick'))) # 27 secs

# using a for-loop is slightly faster than apply (and avoids transpose):
system.time({sorted3 <- a; for(i in seq_len(nrow(a))) sorted3[i,] <- sort.int(a[i,], method='quick') }) # 26 secs

但是更好的方法应该是使用并行包对矩阵的各个部分进行并行排序。但是,传输数据的开销似乎太大,在我的机器上它开始交换,因为我“只有”有8 GB的内存:
library(parallel)
cl <- makeCluster(4)
system.time(sorted4 <- t(parApply(cl,a,1,sort.int, method='quick'))) # Forever...
stopCluster(cl)

关于r - 在R中对大型矩阵的每一行进行排序的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com