我经常需要在矢量的各个部分进行搜索,但我不希望索引基于部分而是基于整个矢量。有没有比这更正式的方式:
find(y(5:10))+5-1
答案 0 :(得分:0)
您可以将find
与掩码一起使用,该掩码告诉find
您要跳过哪些索引。您可以做的是声明一个与y
大小相同的掩码,并将false
放在您不希望find
搜索的位置和{{1 }} 除此以外。这样,当您完成时,您不需要抵消true
的索引。声明此掩码后,使用要设置的布尔条件搜索所需的值,并确保将此结果与掩码逻辑AND。
这样的事情:
find
上面的代码将随机生成器种子设置为123,这样您就可以重现我生成的结果。接下来,我们生成20个1到10之间的随机整数,并创建一个大小相同的掩码,我们只想在随机向量的5到10位内搜索。我想查找位置5到10中与10的值匹配的任何实例,因此首先搜索rng(123);
y = randi(10,20,1);
mask = false(20,1);
mask(5:10) = true;
ind = find((y == 10) & mask);
,然后使用掩码对此进行逻辑AND,以仅包括所需范围内的条目。 y == 10
应该为您提供与整个向量相关的索引。
要了解ind
和y
是什么,请查看以下内容:
mask
请注意,在位置5和位置10之间,这是>> y
y =
7
3
3
6
8
5
10
7
5
4
4
8
5
1
4
8
2
2
6
6
>> mask
mask =
0
0
0
0
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
为我们提供的内容:
y
因此,8的值来自位置5,值5来自位置6,依此类推。我想搜索所有等于10的值,因此当我们使用>> y(mask)
ans =
8
5
10
7
5
4
运行最终语句时,我们得到:
find
如您所见,我们发现>> ind = find((y == 10) & mask);
ind =
7
的值位于第7位,参考整个矢量确实是正确的。