gpt4 book ai didi

r - R中的性能:在矩阵中对行的元素进行排序的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-02 05:36:24 24 4
gpt4 key购买 nike

我有一个矩阵,其中有几百万行和大约40列。

我想对每一行中的元素进行排序,以使它们的值递减。因此,每一行具有最高值的元素应在第一列中。

为此,我可以使用apply函数。例如:

set.seed(1)
mm <- replicate(10, rnorm(20)) #random matrix with 20 rows and 10 columns
mm.sorted <- apply(mm,1,sort,decreasing=T)

但是,当我对非常大的矩阵执行此操作时,此方法将花费很长时间。

我想知道是否有其他方法可以加快行中元素的排序。

最佳答案

您可以使用包data.table:

set.seed(1)
mm <- matrix(rnorm(1000000*40,0,10),ncol=40)
library(data.table)
system.time({
d <- as.data.table(mm)
d[, row := .I]
d <- melt(d, id.vars = "row") #wide to long format
setkey(d, row, value) #sort
d[, variable := paste0("V", ncol(mm):1)] #decreasing order

#back to wide format and coerce to matrix
msorted <- as.matrix(dcast(d, row ~ variable)[, row := NULL])
})
#user system elapsed
#4.96 0.59 5.62

如果您可以将其保存为长格式的data.table(即跳过最后一步),则在我的计算机上大约需要2秒钟。

为了进行比较,在我的机器上@qjgods回答的时间:
#user  system elapsed 
#3.71 2.08 8.81

请注意,使用 apply(或其并行版本)会转置矩阵。

关于r - R中的性能:在矩阵中对行的元素进行排序的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141761/

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