检索矩阵的交集

时间:2015-04-07 10:24:29

标签: matlab

whos.exit  whos    condition1  result
 650        452      1          0
 654        456      0          0
 254        650      1          1
 785        412      1          0
 756        654      1          1
            744      0          0
            125      1          0
            985      1          0
            ...      ...        ...

我希望获得结果矩阵。 结果矩阵包含所有" whos"它满足条件1并且存在于whos.exit但没有特别的顺序。注意:whos.exit中的所有元素都是唯一的,whos(condition1)的结果将给出独特的结果。

2 个答案:

答案 0 :(得分:4)

您可以使用ismember -

result = ismember(whos,whos.exit).*condition1

bsxfun -

result = any(bsxfun(@eq,whos,whos.exit.'),2).*condition1

由于whosin-built command in MATLAB,我建议使用其他一些变量名作为良好做法

答案 1 :(得分:2)

您可以使用intersect

intersect(whos.exit,whos.*condition1)
ans =

   650
   654

或者如果你想要一个二进制数组(虽然不像ismember那样优雅)

A=zeros(size(whos.exit,1),1);
[~,~,iwe]=intersect(whos,whos.exit);
A(iwe) = 1;
A.*c1
ans =

   0
   0
   1
   0
   1
   0
   0
   0

[~,~,iwe]=intersect(whos,whos.exit);
sum((((c1.*whos.exit)./whos.exit(iwe)')==1)')'

ans =

   0
   0
   1
   0
   1
   0
   0
   0

详细信息

whose.exit中查找其值均在两个数组中的索引。

[~,~,iwe]=intersect(whos,whos.exit)
iwe =

   3
   5

查找这些值的位置。我只是使用一个除法,因为除以它自己的值将显示1并告诉我们值的位置。每行代表我们要查找的值,列代表该值的位置。第一个值(whos.exit(iwe(1)))是位置3的位置,第二个(whos.exit(iwe(2)))是位置5的位置。

(((c1.*whos.exit)./whos.exit(iwe)')==1)'
ans =

   0   0   1   0   0   0   0   0
   0   0   0   0   1   0   0   0

我们只是求和并转置它以获得二进制数组

sum((((c1.*whos.exit)./whos.exit(iwe)')==1)')'
ans =

   0
   0
   1
   0
   1
   0
   0
   0