我有一个向量(姑且称之为V)中的元素都等于0的大部分时间,但它也可以有我想检测指标在那里它开始是等于2的1序列和2。
我试图做的:
ind = find(diff(v) == 2);
但它不工作:
ANS = 1×0空双行向量
这是因为我的矢量V等元素永远不会从0到2直接,总有-之间的“缓冲”元素等于1,所以它看起来像:0 0 0 0 1 1 1 1 0 0 0 0 1 2 2 2 0 0 0 ... ...
我在寻找一个可以做同样的差异,但回报率X(N)-X的功能(N-2),而不是X(N)-X(N-1),以解决我的问题,或任何其他解决方案
有没有这样的功能,我知道的,但它很容易做手工:
v = [6 9 4 8 5 2 5 7]; % example data
step = 2; % desired step
result = v(1+step:end)-v(1:end-step); % get differences with that step
作为替代(感谢@CrisLuengo的提示),你可以按如下方式使用卷积:
result = conv(v, [1 zeros(1,step-1) -1], 'valid');
其中v的值增加了2 ind = find(diff(v) == 2);
将突出指标。
您需要将相同的值检测到2,然后使用diff寻求第一个值。 ind = find(diff(v == 2));
更接近您的需求。
下面的代码应该很好地工作:
%Make a logical vector, true if v equal 2
valueIs2 = (v==2);
%Make a logical vector where:
% First value is true if the vector v starts with 2
% The next values are true only if this is the first 2 of a sequence
isStartOfSequence = [v(1) diff(v)>0];
%another equivalent option:
isStartOfSequence = [v(1) (v(2:end) & ~v(1:end-1))];
% Use find to convert logical to indices
indicesStartOfSequence = find(isStartOfSequence);