在matlab,对一个数列排序后,怎样得到原数列的各个元素在排序后的数列的位置?

如题所述

在matlab中常用sort函数对数列进行排序
[B,I] = sort(A)

这样得到的B序列就是A序列中元素从小到大排列的序列
而sort函数不单只能返回一个序列B,还能返回第二个参数I
这里I就是排序后数列各元素在原序列中的位置,也就是B=A(I);

这时候只要再对I排序一次
[C,II]=sort(I)
得到的II就是原数列的各个元素在排序后的数列的位置,也就是A=B(II);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-25
如果你用的是sortrows函数,那么可以这样写:[Y,I]=sortrows(A);
其中Y是排序后的数列,I是排序后元素在原来的数列中的位置。本回答被提问者采纳
第2个回答  2018-03-28

假如你要排序的数组是 A,那么:

[B,I] = sort(A)

返回的 B 是排序后的数组,I 是对应元素原来在 A 中的位置。

比如:

A = [79, 39, 25, 41, 10];
[B, I] = sort(A)
% >>>
% B =
%     10    25    39    41    79
% I =
%      5     3     2     4     1

观察 I,第一个元素是 5。这就表示,原来的第 5 个元素,排序后在第 1 的位置。

这个元素的值是 10,即是 B(1)。如果你只关心 I 对排序后的数组不感兴趣,也可写成:

[~,I] = sort(A)

这样就只返回 I,不返回 B 了。

第3个回答  2018-03-28
用sort函数排序的话,[sX,index] = sort(X) ,排序后,sX是排序好的向量,index是 向量sX中对X 的索引。