Matlab中如何将第一个矩阵的每一行与第二个矩阵的每一行相减
矩阵两两行相减实现方案
原理:利用张量广播机制实现向量化运算,无需写嵌套循环,运算效率远高于逐行遍历。51行的两个矩阵两两配对共得到51×51=2601组运算结果,最终拼接为目标维度的矩阵。
Python + NumPy 实现
import numpy as np # 示例生成测试矩阵,实际使用时替换为自己的A、B矩阵即可 A = np.random.rand(51, 5100) B = np.random.rand(51, 5100) # 维度扩展后广播相减,再拉平前两个维度 C = (A[:, np.newaxis, :] - B[np.newaxis, :, :]).reshape(-1, 5100) # 维度校验 print(C.shape) # 输出 (2601, 5100)
默认行顺序:A的第0行依次减B的0~50行,再到A的第1行依次减B的所有行,以此类推。
PyTorch 实现
逻辑和NumPy完全一致,适配张量运算场景:
import torch A = torch.randn(51, 5100) B = torch.randn(51, 5100) C = (A[:, None, :] - B[None, :, :]).flatten(0, 1) print(C.shape) # 输出 torch.Size([2601, 5100])
MATLAB 实现
% 测试矩阵生成,实际使用替换为自有矩阵 A = rand(51, 5100); B = rand(51, 5100); C = reshape(permute(A, [1,3,2]) - permute(B, [3,1,2]), [], 5100); size(C) % 输出 2601 5100
- 所有实现均为向量化运算,当前数据规模下运算耗时可忽略,内存占用仅10MB左右(单精度浮点)
- 若需要调整C的行排列顺序,仅需修改相减前的维度排列参数即可
内容的提问来源于stack exchange,提问作者Pny
相关产品推荐
相关产品推荐

