加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab 数据处理(排序返回‘序号’问题)--备忘

(2008-12-20 10:00:39)
标签:

杂谈

分类: MSN搬家

返回列数据的排名顺序

以简单数列b为例:

>> b=[1 4 9 2 3 6 8 7 5 ]

b =

                             5

 

  1. 从小到大排,sort(b)等价于sort(b,'ascend')

          >> [s ind]=sort(b)

          s =

                                      9

          ind =

                                      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 =

                                        5

        因此,b中数据(1                          5)在从小到大排序(1                          9 )分别列第1                          5位。

 

      2.从大到小排

          >> b=[1 4 9 2 3 6 8 7 5 ]

              b =

                                          5

         >>[s2 ind2]=sort(b,'descend')          %这个'descend'是必须加的。

            s2 =

                                          1

           ind2 =

                                         1

          则b若按从大到小排,则顺序应为第3                          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 =

                                            5

        因此,b中各数据(1                          5)在从大到小排序( 9                          1 )中,分列第9                          5位。

 

       此处只用了简单数据进行模拟,其实数据越多越杂越能体现其功能。

       网上有些总结是有问题的,如有人提出的[sA ind]=sort(a),sA是排好序之后的数列,可永远得sA(ind)=a,其实事实应该是a(ind)=sA.

       事实为证:

       1、从小到大排

       >>b(ind)

          ans =

                                       9

       2、 从大到小排

       >> b(ind2)

ans =

                             1

此为备份。

0

阅读 收藏 喜欢 打印举报/Report
后一篇:2009 新的一年
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有