24小时热门版块排行榜    

查看: 691  |  回复: 2
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

songzq

铁杆木虫 (正式写手)

[求助] 如何将m个已经由小到大排序的数组元素按从小到大编码成n个自然数(m<n)? 已有1人参与

X=[2.1 3.5 4.0 6.7 8.1 8.5];
m=6;n=4;

%X=[-28.6842  -22.8615  -16.4373   -4.4710   -1.4859    2.6217    6.1314    7.8344    9.2352   15.9780 20.6900   22.5432   25.1353   28.0081   28.9764];
%m=15;n=10;
  for i=1:m-1
    Xsub(i)=X(i+1)-X(i);
  end
      
   %取Xsub中最小的m-n个数,并记录下这些数对应的Xsort中的减数与被减数
    Xsub_Temp=Xsub;
    [B, IX] = sort(Xsub_Temp);%B为排序后的数组,IX为原元素的位置
    MINIndex=IX(1:m-n);%得到m-n个最小数的索引
      
    %对Xsort每个维度按从小到大的顺序,依次赋值为1~n的自然数,将上步中记录下的Xsub的数所对应的减数与被减数赋值为相同的值
    i=1;tempn=1;
    Xsort_temp=zeros(1,m);
    while i<=m
        flag=ismember(i,MINIndex);
        if flag>0
              Xsort_temp(i)=tempn;
              i=i+1;
              Xsort_temp(i)=tempn;
              tempn=tempn+1;
              i=i+1;%重要
              continue
        else
              Xsort_temp(i)=tempn;
              i=i+1;
        end
        tempn=tempn+1;
      end
      
   Xsort_temp

%Xsort_temp输出的结果的 1     2     2     3     4     4,但将X换作15个数的例子时,结果是不对的,按此算法(m=15,n=10时)
%Xsort_temp应该输出:1 2 3 4 5 6 6 7 7 8 8 9 9 10 10
%求高人解答
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

升级了
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

songzq

铁杆木虫 (正式写手)

引用回帖:
2楼: Originally posted by handsomeys at 2014-05-26 12:35:43
不明白你的目的,你得想明白当 MINIndex 里面的指数相邻的时候要怎么处理吧

就是有相邻的情况。
升级了
3楼2014-05-26 13:03:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 3 个回答

handsomeys

新虫 (初入文坛)

【答案】应助回帖

感谢参与,应助指数 +1
不明白你的目的,你得想明白当 MINIndex 里面的指数相邻的时候要怎么处理吧
女博一枚
2楼2014-05-26 12:35:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见