如何高效获取保留两矩阵对应位置公共元素的矩阵?
更高效的向量化实现方法
当然有比循环遍历高效得多的方法!Matlab的核心优势就是向量化运算,完全不用手动写循环就能搞定这个需求,代码还简洁得一批~
实现思路
我们可以先生成一个逻辑矩阵,标记出A和B对应位置元素相等的地方,再用这个逻辑矩阵和原矩阵逐元素相乘,就能自动把不相等的位置置为0,保留相等位置的元素。
具体代码
首先定义你的矩阵:
A = [2 8 4; 7 3 9]; B = [2 1 6; 1 3 9];
然后一行代码生成目标矩阵C:
C = A .* (A == B);
或者用B来计算也可以,结果完全一致:
C = B .* (A == B);
代码解释
A == B:这一步会生成一个和A、B维度相同的逻辑矩阵,对应位置元素相等时为true(数值上等价于1),不等时为false(数值上等价于0)。.*:这是Matlab的逐元素乘法,把逻辑矩阵和A(或B)的每个元素对应相乘,这样相等的位置就保留原元素,不等的位置因为乘以0就变成了0,正好得到你想要的C矩阵。
这种方法不仅代码简洁,而且运算效率远超循环——Matlab对向量化操作有底层优化,尤其是当矩阵规模很大时,速度差距会非常明显。
内容的提问来源于stack exchange,提问作者Matte
相关产品推荐
相关产品推荐

