在MATLAB中的向量中查找特定事件,没有for循环?

时间:2013-06-12 22:38:58

标签: matlab for-loop vector vectorization

我有一个似乎很简单的问题,但也许我错过了一些东西。我们说我有:vector = [10:1:19];。我有另一个向量,want = [11 16 19];我只想要一个命令将为我返回的方式,即向量中出现11,16和19的指示。换句话说,我想要返回,2,7和10.什么命令可能会这样做?我不能使用find,(因为维度不匹配),那么还有另一种方法吗?

实际上vectorwant的长度会很长,因此for循环不会。

2 个答案:

答案 0 :(得分:7)

使用intersect

[C, i_vector, i_want] = intersect(vector, want)

C是两个向量中的常见元素。 i_vector中的公共集合索引vectori_want中的want是{{1}}向量中的匹配集索引。

答案 1 :(得分:1)

或者,您可以使用ismember

要获取vector中的want元素:

vector(ismember(vector,want))
ans =
     11     16    19

获取他们的索引:

find(ismember(vector,want))
ans =
     2     7    10

或只是:

[tf, loc] = ismember(vector,want)
tf =
     0     1     0     0     0     0     1     0     0     1
loc =
     0     1     0     0     0     0     2     0     0     3

其中tf表示vector的每个元素是否存在于want中,而loc表示want中的相应索引。