这是以下一个示例中描述的内容ismember
:
定义两个具有共同值的向量.
A = [5 3 4 2]; B = [2 4 4 4 6 8];
确定哪些元素
A
也是B
以及它们在相应的位置B
.
[Lia,Locb] = ismember(A,B)
结果是:
Lia =
0 0 1 1
Locb =
0 0 2 1
Run Code Online (Sandbox Code Playgroud)
B
匹配最低索引的元素A(3)
是B(2)
.A(4)
等于B(1)
.有没有办法找到匹配相同元素的元素的所有索引?B
A
您可以将输入参数交换为ismember
:
[tf, ia] = ismember(B, A)
Run Code Online (Sandbox Code Playgroud)
举个例子,你应该得到:
tf =
1 1 1 1 0 0
ia =
4 3 3 3 0 0
Run Code Online (Sandbox Code Playgroud)
这可以让你找到,说,所有元素的索引B
是等于A(3)
简单地做:
find(ia == 3)
Run Code Online (Sandbox Code Playgroud)
对于一般情况,这是一个很好的解决方案:
[tf, ia] = ismember(B, A);
idx = 1:numel(B);
ib = accumarray(nonzeros(ia), idx(tf), [], @(x){x});
Run Code Online (Sandbox Code Playgroud)
请注意,输出是一个单元格数组.举个例子,你应该得到:
ib =
[]
[]
[2 3 4]
[ 1]
Run Code Online (Sandbox Code Playgroud)
这意味着有在没有元素B
匹配A(1)
和A(2)
,A(3)
匹配元件B(2)
,B(3)
和B(4)
,和A(4)
等于B(1)
.