R 以最快的方式使用数组索引按降序打印矩阵的排序元素

R 以最快的方式使用数组索引按降序打印矩阵的排序元素,r,sorting,matrix,R,Sorting,Matrix,这似乎是一个简单的问题,但我有困难做这在一个快速的方式 假设我有一个矩阵,我想对这个矩阵进行排序,并按降序存储元素的索引。有没有快速的方法可以做到这一点?现在,我正在提取最大值,存储结果,将其更改为-2,然后在for循环中提取下一个最大值。这可能是最低效的方法 我的问题实际上需要我处理一个20000 X 20000的矩阵。记忆不是问题。任何关于最快的方法的想法都会很好 例如,如果我有一个矩阵 >m<-matrix(c(1,4,2,3),2,2) >m [,1] [,2

这似乎是一个简单的问题,但我有困难做这在一个快速的方式

假设我有一个矩阵,我想对这个矩阵进行排序,并按降序存储元素的索引。有没有快速的方法可以做到这一点?现在,我正在提取最大值,存储结果,将其更改为-2,然后在for循环中提取下一个最大值。这可能是最低效的方法

我的问题实际上需要我处理一个20000 X 20000的矩阵。记忆不是问题。任何关于最快的方法的想法都会很好

例如,如果我有一个矩阵

>m<-matrix(c(1,4,2,3),2,2)
>m
     [,1] [,2]
[1,]    1    2
[2,]    4    3

下面是一个可能的
data.table
解决方案

library(data.table)
rows <- nrow(m) ; cols <- ncol(m)
res <- data.table(
                  row = rep(seq_len(rows), cols), 
                  col = rep(seq_len(cols), each = rows),
                  val = c(m)
)
setorder(res, -val)
res
#    row col val
# 1:   2   1   4
# 2:   2   2   3
# 3:   1   2   2
# 4:   1   1   1
库(data.table)

矩阵只是一个带有
dim
属性的向量。你不能只做
排序(m)
排序(m)
?关于期望的输出,我不确定。此外,您还可以将问题简化为与所需结果相关的问题。我只需要元素的索引,按矩阵的降序排列。如果我进行排序(m)
我会丢失索引信息,因为它被转换为向量。在我的集群中安装软件包几乎是不可能的,我希望找到一个基于默认软件包的解决方案,但这确实有效。谢谢。用base R也很容易达到同样的效果,请参阅我的编辑。我想知道这是如何扩展的,或者你的巨大数据。这太奇怪了。当我尝试这个示例的基本版本时,我没有得到正确的结果,所以我尝试了一个示例<代码>网络您是否重新运行了
行我重新运行了所有内容。它似乎不适用于600 x 600矩阵。
library(data.table)
rows <- nrow(m) ; cols <- ncol(m)
res <- data.table(
                  row = rep(seq_len(rows), cols), 
                  col = rep(seq_len(cols), each = rows),
                  val = c(m)
)
setorder(res, -val)
res
#    row col val
# 1:   2   1   4
# 2:   2   2   3
# 3:   1   2   2
# 4:   1   1   1
res <- cbind(
        row = rep(seq_len(rows), cols), 
        col = rep(seq_len(cols), each = rows),
        val = c(m)
)    
res[order(-res[, 3]),]
#      row col val
# [1,]   2   1   4
# [2,]   2   2   3
# [3,]   1   2   2
# [4,]   1   1   1