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

时间:2014-02-02 04:06:04

标签: 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...

1 个答案:

答案 0 :(得分:2)

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

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