如何直接索引find函数返回的数组

时间:2015-09-28 09:25:28

标签: arrays matlab

tmp = find(A > 0); %// A is a matrix
value = tmp(1);

在这种情况下,我想获得数组find(A > 0)的第一个值。我怎样才能只使用一行而不是两行?

3 个答案:

答案 0 :(得分:2)

要获取条件中第一个true值的索引,可以使用:

ix = find(A>0, 1, 'first');

请注意,ix不一定是单个元素;如果条件未在任何地方得到满足,ix将为空。

通常,要返回条件中k值的第一个true索引,请使用:

ix = find(A>0, k, 'first');

或者,对于真实的最后k个索引:

ix = find(A>0, k, 'last');

同样需要注意:不要指望返回的值有k个元素;请务必查看size的{​​{1}}或numel

答案 1 :(得分:1)

很容易:

A = rand(300,1);
T = find(A>0.8,1)
T =
     4

k = find(X,n)返回对应于X中非零元素的前n个索引。

答案 2 :(得分:0)

要查找满足条件n A>0 - 值(不一定是第一个),您可以使用

value = A(find(cumsum(A>0)==n, 1));

例如,

>> A = [1 0 5 0 4 0 2 -3];
>> n = 2;
>> value = A(find(cumsum(A>0)==n, 1))
value =
     5

工作原理

只要条目满足条件cumsumn(A>0)

A>0就会增加。在上面的例子中,

>> A
A =
     1     0     5     0     4     0     2    -3
>> cumsum(A>0)
ans =
     1     1     2     2     3     3     4     4

因此cumsum(A>0)第一次到达n的索引是您想要的A条目的索引。

相关问题