求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数我想知道怎样用MATLAB求解矩阵中连续出现数的个数比如我给你一个矩阵 A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ]求解A中6连续
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 09:18:40
求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数我想知道怎样用MATLAB求解矩阵中连续出现数的个数比如我给你一个矩阵 A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ]求解A中6连续
求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数
我想知道怎样用MATLAB求解矩阵中连续出现数的个数比如我给你一个矩阵
A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ]
求解A中6连续出现的次数,并把这个出现次数放在B矩阵中
得到的B=[0 2 0 0 2 0 0 3 0 0 0 0 0 1 0 1 0 4 0 0 0]
本人急用,哪位高手帮帮忙啊!
不好意思是我没说清楚:这问题要求解有两个方面
1:要找出矩阵中出现次数最多的那个数a
2:要得到这个数在矩阵中连续出现的次数,且把次数放在B矩阵中
在举一个例子
C=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1]
那么得到的B=[1 0 3 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 3 0 0 ]
B矩阵中得数代表a连续出现的次数,0代表其他数
求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数我想知道怎样用MATLAB求解矩阵中连续出现数的个数比如我给你一个矩阵 A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ]求解A中6连续
这个功能是麻烦点,不过不难,我写了一个m函数,实现这个目标:
function r=hello(a)
if isvector(a))
error('a is not a vector');
r=[];
end
con=[];
num=[];
for n=1:length(a)
b=find(con==a(n));
if isempty(b)
con=[con,a(n)];
num=[num,1];
else
num(b)=num(b)+1;
end
end
[m,k]=max(num)
big=a(k)
flag=0;
last=[];
for n=length(a):-1:2
if (a(n)~=big)&(a(n-1)==big)
last(n)=0;flag=0;
elseif (a(n)~=big)&(a(n-1)~=big)
last(n)=0;flag=0;
elseif (a(n)==big)&(a(n-1)==big)
last(n)=0;flag=flag+1;
elseif (a(n)==big)&(a(n-1)~=big)
last(n)=flag+1;flag=0;
end
end
if a(1)==big
last(1)=flag+1;
else
last(1)=flag;
end
r=last;
%结束----------
%运行:
>> A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ];
>> r=hello(A);
>> A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ];
>> r=hello(A)
r =
Columns 1 through 11
0 2 0 0 2 0 0 3 0 0 0
Columns 12 through 21
0 0 1 0 1 0 4 0 0 0
>> C=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
>> r=hello(C)
r =
Columns 1 through 11
1 0 3 0 0 0 0 0 0 5 0
Columns 12 through 21
0 0 0 0 0 1 0 3 0 0
>> %结果就是你想要的.函数过程可以不看,直接写成m文件用就行了,我写了一两个小时呢,晕
这个很长啊,说下思路吧
设定一个新矩阵,A1=[];
用while或者for循环把不同的数罗列进去
再用for循环寻找每个A1元素对应次数放入A2里
max(A2)反求A1对应元素
for循环求对应等于a的元素的逻辑矩阵A3
0处分解A3为若干小矩阵
求各矩阵和
组合矩阵对应放入B中
完毕
%%想是好想,写起来麻烦得很...
全部展开
这个很长啊,说下思路吧
设定一个新矩阵,A1=[];
用while或者for循环把不同的数罗列进去
再用for循环寻找每个A1元素对应次数放入A2里
max(A2)反求A1对应元素
for循环求对应等于a的元素的逻辑矩阵A3
0处分解A3为若干小矩阵
求各矩阵和
组合矩阵对应放入B中
完毕
%%想是好想,写起来麻烦得很
收起
楼上几位朋友真是牛人,很熟练。我调试了好久现在终于搞定了,给大家分享下;
a=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
[M,F]=mode(a);%找出数组a中出现次数最多的元素,值送M,出现的次数送F
k=0;%出现的次数
i=1;
b=zeros(1,length(a));
全部展开
楼上几位朋友真是牛人,很熟练。我调试了好久现在终于搞定了,给大家分享下;
a=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
[M,F]=mode(a);%找出数组a中出现次数最多的元素,值送M,出现的次数送F
k=0;%出现的次数
i=1;
b=zeros(1,length(a));
while i
while(a(i)==M)%如果a(i)=要求的值,则判断出现的次数
k=1;
for j=(i+1):length(a)%判断出现的具体次数
if (a(j)-a(i))~=0
n=j;
break;
else
k=k+1;
end
end
b(i)=k;
i=j;%将当前连续点出现次数结果的下标送i
break;
end
i=i+1;%指向下一个新单元继续判断
end
b
收起
程序如下,思路比较简单,注释就没写了
A=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
n=length(A);
B=zeros(1,n);
i=1;
while i<=n
for j=i+1:n
if A(i)==A(j)
...
全部展开
程序如下,思路比较简单,注释就没写了
A=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
n=length(A);
B=zeros(1,n);
i=1;
while i<=n
for j=i+1:n
if A(i)==A(j)
B(i)=B(i)+1;
else
break
end
end
i=j;
end
[val,index]=max(B);
a=A(index);
C=zeros(1,n);
i=1;
while i<=n
if A(i)==a
C(i)=C(i)+1;
for j=i+1:n
if A(j)==a
C(i)=C(i)+1;
else
break;
end
end
if j==n
break;
end
i=j;
continue ;
else
i=i+1;
end
end
收起