Matlab 如何提取其列元素存在于数组中的矩阵行?

Matlab 如何提取其列元素存在于数组中的矩阵行?,matlab,Matlab,假设我有一个矩阵,M: 9.89E+10 3.12E+10 29 8.88E+10 8.16E+10 9 9.97E+10 8.31E+10 22 8.10E+10 6.55E+10 94 2.17E+10 8.11E+09 53 6.34E+10 8.84E+10 54 5.69E+10 7.07E+10 8 9.23E+10 8.24E+10 38 8.88E+10 5.81E+10

假设我有一个矩阵,M:

9.89E+10    3.12E+10    29
8.88E+10    8.16E+10    9
9.97E+10    8.31E+10    22
8.10E+10    6.55E+10    94
2.17E+10    8.11E+09    53
6.34E+10    8.84E+10    54
5.69E+10    7.07E+10    8
9.23E+10    8.24E+10    38
8.88E+10    5.81E+10    27
我还有另一个数组,一个:

A=8.88E+10, 9.23E+10
我希望M中的所有条目都包含A中的所有条目。也就是说,我的输出应该是一个矩阵,N:

8.88E+10    8.16E+10    9
9.23E+10    8.24E+10    38
8.88E+10    5.81E+10    27
我可以使用如下代码来完成此操作:

count=1;
for i=1:size(A,1)
    for j=1:size(M,1)
        if M(j,1)==A(i,1)
            extracted(count,:)=M(j,:);
            count=count+1;
        end
    end
end

但我想MATLAB中可能有一个单行程序代码来实现这一点。有没有?

一套解决方案

N = M(sum(ismember(M,A),2)>0,:);
解释

N = M(sum(ismember(M,A),2)>0,:);
  • ismember函数生成一个大小与M相同的二进制矩阵,其中M中存在于a中的每个值包含1,否则为0

  • 我们使用求和函数对矩阵中的每一行求和。总计为大于0的值的行是包含来自a的值的行

  • 最后,我们通过从M中提取符合前一阶段约束的所有行来生成输出矩阵

  • 结果

    N =
    
    8.88E+10    8.16E+10    9
    9.23E+10    8.24E+10    38
    8.88E+10    5.81E+10    27