我希望返回满足某些条件的元素的索引,并且这些元素的索引应该在某些常数A
和B
之间。可以使用以下简单的方法实现此功能:
inds=find(conditions)
real_inds=find(A<=inds<=B)
但是这种方法效率低下,实际上我想要将搜索限制在索引为这些常量之间的元素中,而不是所有元素中。
我希望返回满足某些条件的元素的索引,并且这些元素的索引应该在某些常数A
和B
之间。可以使用以下简单的方法实现此功能:
inds=find(conditions)
real_inds=find(A<=inds<=B)
但是这种方法效率低下,实际上我想要将搜索限制在索引为这些常量之间的元素中,而不是所有元素中。
你可以限制自己在范围 A
, B
内,如何?
假设你有一个名为 my_vector
的向量,并且你想要查找大于0.3小于0.5的元素(“条件
”)。限制自己在范围 A
, B
内只需:
masked_ind = find(my_vector(A:B) > 0.3 & my_vector(A:B) < 0.5);
real_ids = masked_ind + A - 1; %// correct the offset induced by `A`.
my_vector(A:B)
上应用 conditions
,您实际上不关心 my_vector
有多大,而且您只处理范围内的元素 A:B
。
顺便提一下,你是否考虑使用逻辑索引,正如Andras Deak所建议的那样,而不是使用find
和实际的线性索引?
%// create a mask to keep indices from A to B only
real_inds_logical = false(size(your_vector));
real_inds_logical(A:B) = (my_vector(A:B)>0.3 & my_vector(A:B)<0.5);
x
,条件为:x == 7 or ( x > 3 and x < 5)
,你想在 A 和 B 之间进行搜索。g
作为索引的辅助向量:g = 1:length(x);
然后像这样获取您的索引:
indices = g( (g >= A) & (g <= B) & (conditions) );
在这种情况下,它被翻译为:
indices = g( (g >= A) & (g <= B) & (x == 7 | (x > 3 & x < 5)) );
这将返回满足外部括号之间条件的g
元素。
初始值:
x = [0.0975 0.2785 0.5469 0.9575 0.9649 0.1576 0.9706 0.9572 0.4854 0.8003];
A = 4;
B = 9;
条件:x >= 0.1
和 x <= 0.7
代码:
g = 1:length(x);
indices = g((g >= A) & (g <= B) & (x <= 0.7) & (x >= 0.1));
结果:
indices =
6 9