如何在MATLAB中使用索引查找函数约束

3

我希望返回满足某些条件的元素的索引,并且这些元素的索引应该在某些常数AB之间。可以使用以下简单的方法实现此功能:

inds=find(conditions)
real_inds=find(A<=inds<=B)

但是这种方法效率低下,实际上我想要将搜索限制在索引为这些常量之间的元素中,而不是所有元素中。

2个回答

4

你可以限制自己在范围 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);

0
你可以这样做:
假设你有向量 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.1x <= 0.7

代码:

g = 1:length(x);
indices = g((g >= A) & (g <= B) & (x <= 0.7) & (x >= 0.1));

结果:

indices =

 6     9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接