这是以下一个示例中描述的内容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).有没有办法找到匹配相同元素的元素的所有索引?BA
您可以将输入参数交换为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).