查找数据中正曲线的开始和结束索引
Finding start and end indices of positive curves in data
考虑以下示例,其中 x
是
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
在情节中看起来像这样:
现在我想要找到的是图中每条正曲线的起始和结束索引,并将它们存储在矩阵中。我在下面编写的代码工作正常,但它不是我所说的优雅。有没有人有更好更有效的方法?
zero_padding = zeros(1,2);
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
x = [x zero_padding]
stp(1) = find(x>0 , 1, 'first')
enp(1) = find(x(stp(1):end)==0 , 1, 'first') - 1
stoffset = enp(1);
i = 2
while(~isempty(find(x(stoffset + 1:end)>0 , 1, 'first')))
stp(i) = find(x(stoffset + 1:end)>0 , 1, 'first') + stoffset
enp(i) = find(x(stp(i) + 1:end) == 0 , 1, 'first') + stp(i) - 1
stoffset = (enp(i)) + 1;
i = i + 1;
end
输出为:
>> stp =
1 22 43 65
>> enp =
10 31 52 75
这是正确的。
注意:我已经尝试使用:
startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
如果正曲线只是完美的正方形,它会工作得很好,但正如您在图中看到的那样,它有很多下降。所以很难使用它,因为 diff
也会在这些下降时给出 +1 或 -1。
您的第二种方法非常接近,即
startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
宁愿尝试
posData = [0, x>0] %prepend with zero to catch if the data starts with a positive region
startindex = find(diff(posData) == 1)
endindex = find(diff(posData) == -1)
考虑以下示例,其中 x
是
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
在情节中看起来像这样:
现在我想要找到的是图中每条正曲线的起始和结束索引,并将它们存储在矩阵中。我在下面编写的代码工作正常,但它不是我所说的优雅。有没有人有更好更有效的方法?
zero_padding = zeros(1,2);
x = [randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,11) randi([10 20],1,10) zeros(1,12) randi([10 20],1,11) ];
x = [x zero_padding]
stp(1) = find(x>0 , 1, 'first')
enp(1) = find(x(stp(1):end)==0 , 1, 'first') - 1
stoffset = enp(1);
i = 2
while(~isempty(find(x(stoffset + 1:end)>0 , 1, 'first')))
stp(i) = find(x(stoffset + 1:end)>0 , 1, 'first') + stoffset
enp(i) = find(x(stp(i) + 1:end) == 0 , 1, 'first') + stp(i) - 1
stoffset = (enp(i)) + 1;
i = i + 1;
end
输出为:
>> stp =
1 22 43 65
>> enp =
10 31 52 75
这是正确的。
注意:我已经尝试使用:
startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
如果正曲线只是完美的正方形,它会工作得很好,但正如您在图中看到的那样,它有很多下降。所以很难使用它,因为 diff
也会在这些下降时给出 +1 或 -1。
您的第二种方法非常接近,即
startindex = (find(diff(x)>0)) + 1
endindex = (find(diff(x)<0))
宁愿尝试
posData = [0, x>0] %prepend with zero to catch if the data starts with a positive region
startindex = find(diff(posData) == 1)
endindex = find(diff(posData) == -1)