首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

matlab数组中某元素连续个数统计小程序

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
继承事业,薪火相传
返回列表