有没有不一样的差异但两步一个matlab函数?即得到X(N)-X(N-2)而不是X(N)-X(N-1)

问题描述 投票:0回答:2

我有一个向量(姑且称之为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),以解决我的问题,或任何其他解决方案

matlab double difference
2个回答
3
投票

有没有这样的功能,我知道的,但它很容易做手工:

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');

0
投票

其中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);
© www.soinside.com 2019 - 2024. All rights reserved.