Using ismember to seek out pairs

2 次查看(过去 30 天)
Currently messing with some code which I can't quite get to do what I want.
I have A = [1 2 5; 4 5 7; 7 8 9; 4 7 10; 6 7 2] and B = [2 3; 4 9; 7 9; 7 6]
I want b to be compared with a and using ismember and indicate all the rows that both values in each row in b exist.
So here the answer would be
ans = [0; 0; 1; 0; 1]
The 3rd and 5th rows in A contain a whole row in B so a 1 is returned.
At the moment I am trying, ismember(A,B) but this returns
ans =
0 1 0
1 0 1
1 0 1
1 1 0
1 1 1
as ismember simply return a 1 when any value of B is found in A. Any idea how to use ismember (or otherwise) to do what I am needing?
Thanks

采纳的回答

Azzi Abdelmalek
Azzi Abdelmalek 2013-9-18
编辑:Azzi Abdelmalek 2013-9-18
A = [1 2 5; 4 5 7; 7 8 9; 4 7 10; 6 7 2]
B = [2 3; 4 9; 7 9; 7 6]
for k=1:size(A,1)
out(k)=any(all(ismember(B,A(k,:)),2));
end
out
%or
out=arrayfun(@(x) any(all(ismember(B,A(x,:)),2)),1:size(A,1))
  5 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2013-9-18
Do you mean
y={[1 2 5; 4 5 7; 4 7 10; 6 7 2;44 1 7],[1 2 5; 4 5 7; 7 8 9; 4 7 10; 6 7 2]}
B = [2 3; 4 9; 7 9; 7 6;44 7;11 12;1 2]
for k=1:numel(y)
A=y{k}
out{k}=arrayfun(@(x) any(all(ismember(B,A(x,:)),2)),1:size(A,1));
end
celldisp(out)

请先登录,再进行评论。

更多回答(1 个)

Andrei Bobrov
Andrei Bobrov 2013-9-18
编辑:Andrei Bobrov 2013-9-18
w = bsxfun(@eq,reshape(A',[],1),reshape(B',1,[]));
out = any(blockproc(w,[3 2],@(x)sum(x.data(:)))==2,2);
or
w = bsxfun(@eq,reshape(A',[],1),reshape(B',1,[]));
z = conv2(w + 0,ones(3,2));
out = any(z(3:3:end,2:2:end)==2,2);

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by