Board logo

标题: matlab数组中某元素连续个数统计小程序 [打印本页]

作者: yuyang911220    时间: 2017-2-23 17:01     标题: matlab数组中某元素连续个数统计小程序

可以找出任何值得连续值(不包含零)
例如
找出 a= [0 0 2 2 2 2 3 5 2 0 1] 之中的 2 的连续值下標及连续多少個 2
[idx res]=findcont1(a,1,[2,2]) % 第一個式输入矩阵%第二個必须达到 1 個以上的连续值  %第三個輸入是找出连续值的范围
>>
idx= 3 9  % 连续值的最前面一個下标
res=4 1  % 相对应的连续次数


function [idx2 res2]=findcont1(V,h,n)
%[idx res]=findcont1(V,h,n)
%          V 輸入的矩陣(限制一維)
%          n 找出範圍內的連續值 預設值 0~inf
%          h 找出連續 h 各以上的連續值 預設值 h=1 如果輸入矩陣將改變成預設值
%
%
%  [idx res]=findcont1([-3 -2 3 0 3 4],[],[-5 4])
%  idx = 1     5
%  res = 3     2
%
%  [idx res]=findcont1([-3 -2 3 0 3 4],3,[-5 4])
%  idx = 1
%  res = 3
%
%
%  a=[1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1];
%  [r y]=findcont1(a,3,[-5 4])
%  idx = 6    18    24
%  res = 5     5     4
%
%  [r y]=findcont1(a,[],[-5 4])
%  idx = 1     6    13    16    18    24
%  res = 2     5     2     1     5     4

    if nargin==2
        n=[0 inf];
    elseif nargin==1
        h=1;
        n=[0 inf];
    else
            if size(n,2)==1
                n=[n inf];
            end
    end
   
    if isempty(h)||sum(h)==0||size(h,2)~=1
        h=1;
    end
   
    V(V>=n(1)&V<=n(2)&V~=0)=NaN;
    V(~isnan(V))=0;
    V(isnan(V))=1;
        
    a=[0,V,0];
    idx = find(diff(a)==1);
    b = [0,a(1:end-1)];
    c = [a(2:end),0];
    res1 = find(b>a) - find(c>a) - 1;  
    res2=res1(res1 >=h);
    idx2=idx(res1 >=h);
end




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0