返回列数据的排名顺序
以简单数列b为例:
>> b=[1 4 9 2 3 6 8 7 5 ]
b =
1
4 9
2 3
6 8
7 5
- 从小到大排,sort(b)等价于sort(b,'ascend')
>> [s ind]=sort(b)
s =
1 2
3 4
5 6
7 8 9
ind =
1 4
5 2
9 6
8 7 3
则b若按从小到大排,则顺序应为第1 4 5 2 9 6 8 7 3位。
如何计算b中各数据在从小到大排列中的位置?
用小循环解决之:
>> [m n]=size(ind)
m =
1
n =
9
>> for i=1:9
Order_b_sTol(ind(1,i))=i;
end
%%具体思路:按ind说明,从小到大排的话,排在第1位的数在b中也处于第一位,排在第2位的数字在b中为第四位……则b中第一位的数处于第一位,第四位的数处于第二位。用循环一次便利ind格数,相应地将b中b(ind)位上的数换成序列顺序。
i=1时,ind(1,i)=ind(1,1)=1, 此时
Order_b_sTol(ind(1,1))=1
对应b中第一个数(1)排序为第1位
i=2时 ind(1,i)=ind(1,2)=4, 此时
Order_b_sTol(ind(1,2))=2
对应b中第四个数(2)排序为第2位
i=9时
ind(1,i)=ind(1,9)=3, 此时
Order_b_sTol(ind(1,9))=9
对应b中第三个数(9)排序为第9位
返回:
>>Order_b_sTol
Order_b =
1 4
9 2
3 6
8 7 5
因此,b中数据(1 4
9 2
3 6
8 7
5)在从小到大排序(1 2
3 4
5 6
7 8 9
)分别列第1 4
9 2
3 6
8 7 5位。
2.从大到小排
>> b=[1 4 9 2 3 6 8 7 5 ]
b =
1 4
9 2
3 6
8 7 5
>>[s2
ind2]=sort(b,'descend')
%这个'descend'是必须加的。
s2 =
9 8
7 6
5 4
3 2 1
ind2 =
3 7
8 6
9 2
5 4 1
则b若按从大到小排,则顺序应为第3 7
8 6
9 2
5 4 1位。
如何计算b中各数据在从大到小排列中的位置?
同样用小循环解决之:
>> [m2 n2]=size(ind2)
m2 =
1
n2 =
9
>> for i=1:n2
Order_b_LtoS(ind2(1,i))=i;
end
>> Order_b_LtoS
Order_b_LtoS =
9 6
1 8
7 4
2 3 5
因此,b中各数据(1 4
9 2
3 6
8 7 5)在从大到小排序(
9 8
7 6
5 4
3 2 1
)中,分列第9 6
1 8
7 4
2 3 5位。
此处只用了简单数据进行模拟,其实数据越多越杂越能体现其功能。
网上有些总结是有问题的,如有人提出的[sA
ind]=sort(a),sA是排好序之后的数列,可永远得sA(ind)=a,其实事实应该是a(ind)=sA.
事实为证:
1、从小到大排
>>b(ind)
ans =
1 2
3 4
5 6
7 8 9
2、
从大到小排
>> b(ind2)
ans =
9
8 7
6 5
4 3
2 1
此为备份。
加载中,请稍候......