matlab将一组数排列,MATLAB中求一列数的排序值(秩)

一步实现方法: [~, ~, idx] = unique(a, 'sorted'); 但这种方法无法实现逆序。

如果想实现逆序必须通过两步才能实现:

[~, idx] = sort(a, 'ascend');

[~, idx] = sort(idx, 'ascend') %其中`ascend`可省略或者:

[~, idx] = sort(a, 'ascend');

[~, ~, idx] = intersect(1:length(idx), idx);或者:

[~, idx] = sort(a, 'ascend');

idx(idx) = 1:length(idx);能够这么写的原因:对于a = [7 5 9 3 10] 来说,一步sort返回的idx表示的是排名分为为1、2、3、4、5位的数在原始序列中的位置。而我们想要的是原始序列中位置为1、2、3、4、5的数他们在排序后序列中的位置。一步sort得到的idx是[4 2 1 3 5],表示的是按照大小排名12345位(记为C)的数字在原始序列中的位置序号分别是42135(记为B),这个B和C有个反向对应关系,B一一对应到C就是原始位置上各数字的排序秩了(就是上述2中的第三种方法,理解起来最简单)。

要理解第一种和第二种的做法,需要知道,12345这列数字有两层含义:一表示从小到大排序的顺序值,二表示原始数据从左到右的位置值,因为这两项含义体现出来的数字都是12345,所以上述两种方法应用中用到了这一转化。

比如intersect的方法,最后落脚在找到12345在42135中的位置,

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值