3

我有一个看起来很简单的问题,但也许我遗漏了一些东西。假设我有:vector = [10:1:19];。我有另一个向量,want = [11 16 19];我只是想要一种命令为我返回的方式,即向量中出现 11、16 和 19 的索引。换句话说,我想返回 2、7 和 10。什么命令可以做到这一点?我不能使用find, (因为尺寸不匹配),那么还有其他方法吗?

实际上,vectorand的长度want会很长,所以 for 循环是行不通的。

4

2 回答 2

7

使用intersect

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

C 是两个向量中的公共元素。i_vector将是公共集索引,vector并且i_wantwant向量中的匹配集索引。

于 2013-06-12T22:44:59.730 回答
1

或者,您可以使用ismember.

要获取vectorpresent in的元素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

于 2013-06-13T01:20:55.923 回答