查看: 182|回复: 2|关注: 0

[已解决] 子序列元素在原序列索引位置求解

[复制链接]

新手

17 麦片

财富积分


050


5

主题

10

帖子

0

最佳答案
程序如下:
  1. A=[0 1 20 0 1 1 0 35 100 1000 55 200 0 0 28]';
  2. A1=sort(A);
  3. difference=diff(A1);
  4.           difftol = mean(A1)/10;
  5.             large = difference>difftol;  
  6.     if any(large)
  7.      pos = find(large,1,'first');
  8.      end
  9.             pos=pos+1;
  10.             A2=A1(pos:end,1);
  11.          for i=1:length(A2)
  12.     for j=1:length(A)  
  13.       large1=(A2(i,1)==A(j,1));                 
  14.        if any(large1)
  15.        position=find(large1,1,'first');%我想position输出我想要的值的
  16. %disp(j); 此时j里的值是我想求的值,即3,15,8,11,9,12,10
  17.        end
  18.      end
  19.                  
  20.          end
复制代码

回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

427 麦片

财富积分


50500


21

主题

250

帖子

50

最佳答案
  • 关注者: 6
发表于 2020-5-19 09:06:12 | 显示全部楼层 |此回复为最佳答案
%你程序没问题,就是输出j保存下来呗,在循环中保存,可初始赋值JG=[];循环时JG=[JG;j];进行保存;后面%我写了种不用循环求取子序列位置的方法二,可以参照学习
clear;
A=[0 1 20 0 1 1 0 35 100 1000 55 200 0 0 28]';
A1=sort(A);
difference=diff(A1);
difftol = mean(A1)/10;
large = difference>difftol;
if any(large)
    pos = find(large,1,'first');
end
pos=pos+1;
A2=A1(pos:end,1);

% 按照你的方法解决
JG=[];
for i=1:length(A2)
    for j=1:length(A)
        large1=(A2(i,1)==A(j,1));
        if any(large1)
            position=find(large1,1,'first');%我想position输出我想要的值的
            %disp(j); %此时j里的值是我想求的值,即3,15,8,11,9,12,10
            JG=[JG;j]
        end
    end
   
end


%% 方法二
%判断数组元素是否为集数组成员;即w记为A2在A中的位置
[~,w]=ismember(A,A2);
% 对w进行排序
[B,I]=sort(w);
% 输出子序列
JG2=I(B>0);
回复此楼 已获打赏: 0 积分

举报

新手

17 麦片

财富积分


050


5

主题

10

帖子

0

最佳答案
 楼主| 发表于 2020-5-19 10:04:32 | 显示全部楼层
15631202458 发表于 2020-5-19 09:06
%你程序没问题,就是输出j保存下来呗,在循环中保存,可初始赋值JG=[];循环时JG=[JG;j];进行保存;后面%我 ...

其实,我已经做出来了,还是感谢你,你的方法我也学习了,谢谢!
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表