【发布时间】:2019-09-10 13:43:31
【问题描述】:
对于如何在 MATLAB 中检索已排序数组的新索引,我想不出一个干净的解决方案。
Scipy(在 Python 中)有我需要的 rankdata,而 MATLAB 的 sort 提供索引。
例如[0 -3 -1 1]数组升序排序后为[-3 -1 0 1]。
我想检索新索引,即[3 1 2 4],而 MATLAB 没有提供内置解决方案..
【问题讨论】:
对于如何在 MATLAB 中检索已排序数组的新索引,我想不出一个干净的解决方案。
Scipy(在 Python 中)有我需要的 rankdata,而 MATLAB 的 sort 提供索引。
例如[0 -3 -1 1]数组升序排序后为[-3 -1 0 1]。
我想检索新索引,即[3 1 2 4],而 MATLAB 没有提供内置解决方案..
【问题讨论】:
你可以使用:
x = [0 -3 -1 1];
[~,ind] = sort(x);
ind = ind(ind)
【讨论】:
unique 恰好也按升序排序,并提供双向索引。
A = [0 -3 -1 1];
[B,I,C] = unique(A);
B =
-3 -1 0 1
C =
3
1
2
4
请注意,如果 A 包含重复项(与您的示例不同),此方法将失败:
A = [0 -3 -1 1 1];
[B,I,C] = unique(A);
B =
-3 -1 0 1
C =
3
1
2
4
4
【讨论】:
A不包含任何重复的最佳解决方案。
unique
如果我正确地解释了您的要求,我认为这应该可行。
x = [0 -3 -1 1];
[s,r]=sort(x);
[~,rank] = sort(r);
我得到的输出是
s = -3 -1 0 1
rank = 3 1 2 4
【讨论】: