- UID
- 1029342
- 性别
- 男
|
可以找出任何值得连续值(不包含零)
例如
找出 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 |
|