library(parallel)
data<-matrix(rnorm(1000000*40,0,10),ncol=40)
cl <- makeCluster(8) # 8 is the number of CPU
system.time({
parApply(cl,data,1,sort,decreasing=T)
})
user system elapsed
9.68 10.11 29.87
stopCluster(cl)
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
3条答案
按热度按时间kdfy810k1#
使用并行包加速
6l7fqoea2#
您可以使用package data.table:
如果你能把它保存为一个长格式的data.table(即跳过最后一步),在我的机器上大约需要2秒钟。
为了比较,@qjgods在我的机器上回答的时间:
注意,使用
apply
(或其并行版本)转置矩阵。ee7vknir3#
这里有一个聪明的方法:
也比别人快: