我有一个看起来很简单的问题,但也许我遗漏了一些东西。假设我有:vector = [10:1:19];。我有另一个向量,want = [11 16 19];我只是想要一种命令为我返回的方式,即向量中出现 11、16 和 19 的索引。换句话说,我想返回 2、7 和 10。什么命令可以做到这一点?我不能使用find, (因为尺寸不匹配),那么还有其他方法吗?
实际上,vectorand的长度want会很长,所以 for 循环是行不通的。
我有一个看起来很简单的问题,但也许我遗漏了一些东西。假设我有:vector = [10:1:19];。我有另一个向量,want = [11 16 19];我只是想要一种命令为我返回的方式,即向量中出现 11、16 和 19 的索引。换句话说,我想返回 2、7 和 10。什么命令可以做到这一点?我不能使用find, (因为尺寸不匹配),那么还有其他方法吗?
实际上,vectorand的长度want会很长,所以 for 循环是行不通的。
使用intersect:
[C, i_vector, i_want] = intersect(vector, want)
C 是两个向量中的公共元素。i_vector将是公共集索引,vector并且i_want是want向量中的匹配集索引。
或者,您可以使用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。