Matlab:找到满足条件的向量中的第一个项目,然后跳过超过100个值以查找下一个值

时间:2013-08-06 21:26:49

标签: matlab find

在Matlab R2010a中:

我熟悉基于标准查找值以及在满足条件的向量中查找第一个值。但是,在以下示例中,如何找到X而不是Y?在这种情况下,X是根据我的标准可以找到的一组值的第一个值,并且在成千上万的垃圾值中存在多个这样的组。

我有一个10,000或更多值的向量。让J成为垃圾值,而XY都是我的查找条件将获取的值。 X对我来说很有意思,因为它们是一系列值的'第一'值,在成为J之前满足我的标准。假设在JX之间存在数百或数千Y个,但这是一个小例子

[J,J,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J];

2 个答案:

答案 0 :(得分:4)

假设你没有对那些XY做一些奇怪的事情,这很容易。您只需要找到每个集群的开头:

% Create data using your example (Y can equal X, but we make it different)
J = 1; X = 2; Y = 3;
A = [J,J,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J];

a0 = (A==X);                      % Logical indices of A that match X condition
start = find([a0(1) diff(a0)]==1) % Start index of each group beginning with X
vals = A(start)                   % Should all be equal to X

返回

start =

     12    26


vals =

      2     2

J值甚至不需要完全相同,只是不等于你所检测的X。您可能还会发现my answer to this similar question有帮助。

答案 1 :(得分:0)

A = [J,J,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J,J,J,J,J,J,J,J,J,X,Y,Y,Y,Y,J]; % created vector
I = A(A~=J); % separated out all values that are not junk
V = I(I==I(1)); % separated all values that match the first non-junk value