matlab - 获取在 matlab 稀疏矩阵中按降序排序的前 N ​​个值的索引

标签 matlab sorting matrix sparse-matrix

我对 matlab 编程语言非常陌生,正在尝试完成以下任务:

   (1,3)       0.0000
   (2,3)       0.0000
   (3,3)       0.0000
   (4,3)       0.4803
   (5,3)       0.0000
   (6,3)       0.0000
   (7,3)       0.0000
   (8,3)       0.0000
   (9,3)       0.0030
  (10,3)       0.0000
  (11,3)       0.0000

上面的矩阵是一个稀疏列向量(上面只显示了其中的一部分),其值大部分为零。我想获得按降序排序的值的索引,这基本上会按降序给我非零正值(向量中没有负值!)及其相应的索引。我想知道如何在 matlab 中实现这一点。我在 matlab 中尝试了 sort 函数,它似乎对值进行了排序,但没有跟踪同样重要的索引。我还查看了 sortrows 函数,但似乎对我不起作用。我尝试了以下来自 SO 的另一个问题的代码(不幸的是我无法再次找到它以便在这里引用它):

A = sparse([0,1,2;3,4,5;6,7,8])
[sortValues,sortIndex] = sort(A(:),'descend');

输出:

sortValues =

   (1,1)        8
   (2,1)        7
   (3,1)        6
   (4,1)        5
   (5,1)        4
   (6,1)        3
   (7,1)        2
   (8,1)        1 

    sortIndex =

         9
         6
         3
         8
         5
         2
         7
         4
         1

在这种情况下,我不知道如何使用 sortIndex 来检索排序值的原始索引。任何帮助将不胜感激。

为了清楚起见,我在上面的稀疏矩阵情况下寻找的输出是 是:

(4,3)     0.4803
(9,3)     0.0030
........  0.0000
........  0.0000
........  0.0000
etc...

最佳答案

 [I,J,S]=find(A);

 result=sortrows([I,J,S],-3);

关于matlab - 获取在 matlab 稀疏矩阵中按降序排序的前 N ​​个值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506894/

相关文章:

r - 使用 `subset` 函数按列名进行矩阵子集化

c++ - 从 MATLAB diag(sqrt(v)) 转换为 C++ 中的 Eigen

Matlab - 分配到数组导致错误 : "Maximum variable size allowed by the program is exceeded"

C# 遍历按值排序的字典

Python 排序 - 半忽略大小写(a、aa、A、AA、b、bb、B、BB...)

perl - Perl 的 "$a"函数中的 "$b"和 "sort()"到底是什么?

arrays - MatLab 瓶颈

Matlab:将值添加到初始化的嵌套结构单元中

c++ - 将 RotateAxisAngle 反转回角度

javascript - 如何在 Node.js 中对 ndarray 应用剪切?