在Matlab R2010a中:
我熟悉基于标准查找值以及在满足条件的向量中查找第一个值。但是,在以下示例中,如何找到X
而不是Y
?在这种情况下,X
是根据我的标准可以找到的一组值的第一个值,并且在成千上万的垃圾值中存在多个这样的组。
我有一个10,000或更多值的向量。让J
成为垃圾值,而X
和Y
都是我的查找条件将获取的值。 X
对我来说很有意思,因为它们是一系列值的'第一'值,在成为J之前满足我的标准。假设在J
和X
之间存在数百或数千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];
答案 0 :(得分:4)
假设你没有对那些X
和Y
做一些奇怪的事情,这很容易。您只需要找到每个集群的开头:
% 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