matlab 中怎样找到一维数组连续的元素,并把这些连续元素生成新数组。

如a=[245610383940],找出其中连续的元素,c=[456],d=[383940]!(原数组已按由小到大排序,且元素都为正整数)!急求高手指点1... 如a=[2 4 5 6 10 38 39 40 ],找出其中连续的元素,c=[4 5 6] , d=[38 39 40 ]!
(原数组已按由小到大排序,且元素都为正整数)! 急求高手指点1
展开
 我来答
wacs5
推荐于2017-12-16 · TA获得超过1.6万个赞
知道大有可为答主
回答量:3724
采纳率:82%
帮助的人:2735万
展开全部
a=[2 4 5 6 10 38 39 40 ];

aa=[a,a(end)]; %添加一个元素,与最后一个元素相同,方便程序处理

var='c';
flag=0;
for i=1:length(aa)-1
if aa(i+1)-aa(i)==1
if flag==0
startX=i;
flag=1;
end
endX=i+1;
else
if flag==1
eval([var,'=[',num2str(aa(startX:endX)),']']);
var=var+1;
flag=0;
end
end
end
itdxjx
2011-01-13 · TA获得超过1209个赞
知道小有建树答主
回答量:866
采纳率:50%
帮助的人:690万
展开全部
matlab不建议过多的利用循环处理,多利用matlab自带的函数比较方便。下面给个参考程序吧:

%输入信号
inputA=[ 10,1,2,10,3,4,5,6,7,10,8,9];
inputB=[ 100,1,2,100,3,4,5,6,7,8,100,9];

%自动按最大长度补齐
len=max(length(inputA),length(inputB));
A=[inputA,zeros(len-length(inputA))];
B=[inputB,zeros(len-length(inputB))];

%寻找相等点
temp1=(A==B);
%寻找相等点与其左右两端是否连续
temp2=[temp1,0,0]+[0,temp1,0]+[0,0,temp1];
temp2=temp2(2:length(temp2)-1);
%去掉其中的0点干扰
temp3=temp1.*temp2;
%对连续的点置为1
temp3=(temp3>1);
%求得结果
result=A.*temp3;
%%%%%%%%---------------------------------%%%%%%%%
对于新需求稍微修改一下矩阵维度就可以了,新修改的程序如下:

%输入信号
inputA=[1,2,3,101,102,103,4,5,6,7,8,9,10,11,410,420,430,440,450,12,13];
inputB=[21,22,410,420,430,440,23,24,25,26,27,28,29,30,31,32,33,34,101,102,103,35];
%自动按最大长度补齐
len=max(length(inputA),length(inputB));
A=[inputA,zeros(len-length(inputA))];
B=[inputB,zeros(len-length(inputB))];

%构建用于比较得二维矩阵
%注意此处A每行保持不变,B每行循环右移

A=ones(len,1)*A;

tempB=zeros(len,len);
tempB(1,:)=B;
for i= 1:len-1
temp0=circshift(B,[0 i]);
tempB(i+1,:)=temp0;
end

%寻找相等点
temp1=(A==tempB);
%寻找相等点与其左右两端是否连续
temp2=[temp1,zeros(len,2)]+[zeros(len,1),temp1,zeros(len,1)]+[zeros(len,2),temp1];
temp2=temp2(:,2:length(temp2)-1);
%去掉其中的0点干扰
temp3=temp1.*temp2;
%对连续的点置为1
temp3=(temp3>1);
%求得结果
result=A.*temp3;
%--------------------------------%
最后说一下该结果没有清除掉运算中的0,按自己的需求自己修改解决吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三颗猫糖果
2012-02-22 · TA获得超过3025个赞
知道小有建树答主
回答量:942
采纳率:84%
帮助的人:310万
展开全部
btag=(diff(a)==1|diff(a)==-1); %找到连续元素
ind=find(diff(btag)~=0)+1; %确定位置
%储存结果
c=a(ind(1):ind(2));
d=a(ind(3):end);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式