Matlab - 在索引范围内使用find

时间:2015-02-03 17:46:17

标签: matlab

我经常需要在矢量的各个部分进行搜索,但我不希望索引基于部分而是基于整个矢量。有没有比这更正式的方式:

find(y(5:10))+5-1

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应该为您提供与整个向量相关的索引。

要了解indy是什么,请查看以下内容:

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位,参考整个矢量确实是正确的。