Matlab-使用查找索引范围

Matlab-使用查找索引范围,matlab,Matlab,我经常需要在向量的不同部分进行搜索,但我不希望索引基于该部分,而是基于整个向量。有没有比这更正式的方式: find(y(5:10))+5-1 您可以将find与告诉find要跳过哪些索引的掩码结合使用。您可以做的是声明一个与y大小相同的掩码,并将false放置在您不希望find搜索的位置,否则将true放置在其他位置。这样,完成后就不需要偏移find的索引。声明此掩码后,使用要设置的任何布尔条件搜索所需的值,并确保使用掩码符合逻辑并显示此结果 大概是这样的: rng(123); y = ran

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

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

您可以将
find
与告诉
find
要跳过哪些索引的掩码结合使用。您可以做的是声明一个与
y
大小相同的掩码,并将
false
放置在您不希望
find
搜索的位置,否则将
true
放置在其他位置。这样,完成后就不需要偏移
find
的索引。声明此掩码后,使用要设置的任何布尔条件搜索所需的值,并确保使用掩码符合逻辑并显示此结果

大概是这样的:

rng(123);
y = randi(10,20,1);
mask = false(20,1);
mask(5:10) = true;
ind = find((y == 10) & mask);
上面的代码将随机生成器种子设置为123,以便您可以复制我生成的结果。接下来,我们生成20个介于1和10之间的随机整数,并创建一个大小相同的掩码,我们只希望在随机向量的位置5到10内搜索。我想查找位置5到10中与值10匹配的任何实例,因此首先搜索
y==10
,然后使用掩码进行逻辑和运算,以仅包括所需范围内的条目
ind
应该为您提供与整个向量相关的索引

要查看
y
mask
是什么,下面是它们的外观:

>> 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
请注意,在位置5和10之间,这是
y
为我们提供的:

>> y(mask)

ans =

     8
     5
    10
     7
     5
     4
因此,8的值来自位置5,5的值来自位置6,依此类推。我想搜索所有等于10的值,因此当我们使用
find
运行final语句时,我们得到:

>> ind = find((y == 10) & mask);

ind = 

7

如你所见,我们发现
10
的值位于位置7,这对于整个向量来说确实是正确的。

你就是那个人。我只是改变了蒙版来改变搜索范围。看起来很轻。我想知道,这是一些已知的技术,还是仅仅为Matlab设计的。非常感谢。哈哈,谢谢!事实上,我不确定这是否是一个公认的技术TBH。这是第一件没有像你在文章中那样添加偏移量的事情。你没有用MATLAB标记这个问题,这可能就是为什么有人花了一段时间才发表评论的原因。我已经在你的问题中添加了MATLAB标签,同时删除了其他相关标签,以供未来读者阅读。祝你好运