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)的结果将给出独特的结果。
答案 0 :(得分:4)
您可以使用ismember
-
result = ismember(whos,whos.exit).*condition1
或bsxfun
-
result = any(bsxfun(@eq,whos,whos.exit.'),2).*condition1
由于whos
是in-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