说我有一个矩阵,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中可能会有一个单行代码来执行此操作。有没有?
答案 0 :(得分:2)
一个班轮解决方案
N = M(sum(ismember(M,A),2)>0,:);
<强>解释强>
ismember函数生成一个M大小相同的二进制矩阵,M中存在的每个值包含1,否则为0。
我们使用sum函数对该矩阵中的每一行求和。总计大于0的值的行是包含来自A的值的行。
最后,我们通过从M中获取适合前一阶段约束的所有行来生成out矩阵。
<强>结果强>
N =
8.88E+10 8.16E+10 9
9.23E+10 8.24E+10 38
8.88E+10 5.81E+10 27