0

我不知道该怎么做。我有一些具有重复值的矩阵,我想对它们进行排序并获得排序索引的矩阵。例如:

a = [1 4 3 10 8 2];
b = sort(a);

% This doesn't work but I wish it did - that's what I'm looking for.
% idx = find(a==b);  idx = [1 6 3 2 5 4];

[v idx] = ismember(b,a);

但是,当存在重复值和 NaN 时,这会产生错误。试试这个:

a = [1 NaN 4 2 10 8 2];
b=sort(a);
[v, i] = ismember(b,a);

给出 [1 7 7 3 6 5 0] 这是有效的,但我需要它是 [1 4 7 3 6 5 0]。

我可以稍后处理这个问题,但如果它返回上面的结果会更加优雅。

4

1 回答 1

2

sort有两个输出值版本,可以准确地为您提供您正在寻找的索引:

a = [1 4 3 10 8 2];
[b, idx] = sort(a);

输出

idx =
     1     6     3     2     5     4

这也适用于NaNs :

a = [1 NaN 4 2 10 8 2];
[b, idx] =sort(a);
>> idx
idx =
     1     4     7     3     6     5     2
>> b
b =
     1     2     2     4     8    10   NaN
于 2012-05-14T21:12:11.913 回答