【转】用MATLAB求解一维矩阵中连续出现元素的个数

标签:
教育杂谈 |
问题要求
1:要找出矩阵中出现次数最多的那个数a
2:要得到这个数在矩阵中连续出现的次数,且把次数放在B矩阵中
在举一个例子
那么得到的B=[1
B矩阵中得数代表a连续出现的次数,0代表其他数
这是百度里一位朋友的问题,搞了好久,终于调试通了,给大家分享下,
1.%a=[6 6 6 2 6 6 3
%function b=zhaoxu(a,c)
%c为要找的元素
function b=zhaoxu(a)
%a为要找的数组
[M,F]=mode(a);%找出数组a中出现次数最多的元素,值送M,出现的次数送F
k=0;%出现的次数
i=1;
b=zeros(1,length(a));
while i
%while(a(i)==c)%如果a(i)=要求的值,则判断出现的次数
i=i+1;%指向下一个新单元继续判断
end
可能里面还有一些地方可以优化的,朋友们看到了帮忙指出来下。
2.设定一个新矩阵,A1=[];
用while或者for循环把不同的数罗列进去
再用for循环寻找每个A1元素对应次数放入A2里
max(A2)反求A1对应元素
for循环求对应等于a的元素的逻辑矩阵A3
0处分解A3为若干小矩阵
求各矩阵和
组合矩阵对应放入B中
完毕
n=length(A);
B=zeros(1,n);
i=1;
while i<=n
end
[val,index]=max(B);
a=A(index);
C=zeros(1,n);
i=1;
while i<=n
end
3.a=[1
[M,F]=mode(a);%找出数组a中出现次数最多的元素,值送M,出现的次数送F
k=0;%出现的次数
i=1;
b=zeros(1,length(a));
while i
%while(a(i)==c)%如果a(i)=要求的值,则判断出现的次数
i=i+1;%指向下一个新单元继续判断
end
b
2. 还有一种方式和调试结果
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)
elseif (a(n)~=big)&(a(n-1)~=big)
elseif (a(n)==big)&(a(n-1)==big)
elseif (a(n)==big)&(a(n-1)~=big)
end
end
if a(1)==big
else
end
r=last;
%结束----------
%运行:
>> A=[1 6 6 2 6 6 8
>> r=hello(A);
>> A=[1 6 6 2 6 6 8
>> r=hello(A)
r =
Columns 1 through 11
Columns 12 through 21
>> C=[1
>> r=hello(C)
r =
Columns 1 through 11
Columns 12 through 21