使用NaN对矩阵进行排序,提取索引向量并将NaN移动到最后

时间:2016-12-27 15:39:29

标签: matlab sorting nan

bmake obj && bmake all

如何在忽略NaN的同时按降序对此向量进行排序?得到的向量必须与bmake(1)具有相同的长度,即我需要将所有NaN放在最后。结果应该是这样的: mockup = [3,5,nan,2,4,nan,10,nan];

实际上,我对各个索引感兴趣,即mockup函数的第二个输出向量。所以,我在寻找 mockupSorted = [10,5,4,3,2,NaN,NaN,NaN]

1 个答案:

答案 0 :(得分:5)

您可以使用sort的两个输出,然后使用isnan修改两个输出的顺序。

[vals, inds] = sort(mockup, 'descend');

bool = isnan(vals);

mocksorted = [vals(~bool), vals(bool)];
%    10     5     4     3     2   NaN   NaN   NaN

mocksortedind = [inds(~bool), vals(bool)];
%     7     2     5     1     4   NaN   NaN   NaN

另一个选项是使用ascend排序,只对mockup的否定排序,因为ascend排序会将NaN值放在最后。

[vals, inds] = sort(-mockup);

mocksorted = -vals;
mocksortedind = inds;