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

时间:2016-07-02 09:34:11

标签: 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    27

我有另一个阵列,A:

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中可能会有一个单行代码来执行此操作。有没有?

1 个答案:

答案 0 :(得分:2)

一个班轮解决方案

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

<强>解释

  1. ismember函数生成一个M大小相同的二进制矩阵,M中存在的每个值包含1,否则为0。

  2. 我们使用sum函数对该矩阵中的每一行求和。总计大于0的值的行是包含来自A的值的行。

  3. 最后,我们通过从M中获取适合前一阶段约束的所有行来生成out矩阵。

  4. <强>结果

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