Matlab向量化实现矩阵双向量乘求和时报矩阵维度不匹配如何解决
错误原因
- MATLAB的二维矩阵索引规则:使用两个同尺寸矩阵
M、N索引矩阵T时,T(M,N)会返回维度为size(M,1)*size(M,2) × size(N,1)*size(N,2)的笛卡尔积索引结果,而非你预期的逐位置取T(M(i,j), N(i,j))的同尺寸矩阵,因此出现维度不匹配报错。
修正方案
方案1:修正原有meshgrid写法
通过sub2ind函数将行列下标转换为线性索引,实现逐位置对应取值,符合你的原有逻辑:
T = eye(3); vec_1 = [4,5,6]; vec_2 = [7,8,9]; % 用sub2ind转线性索引实现逐元素对应取值 f = @(m,n) T(sub2ind(size(T), m, n)) .* vec_1(m) .* vec_2(n); [M, N] = meshgrid(1:3,1:3); tot = sum(f(M,N),'all');
方案2:最优矩阵乘法写法(性能更高)
你的计算逻辑本质是二次型运算,直接用矩阵乘法一行即可实现,在大维度矩阵场景下运算效率远高于基于meshgrid的实现:
T = eye(3); vec_1 = [4,5,6]; vec_2 = [7,8,9]; tot = vec_1 * T * vec_2';
两种方案的运行结果都和嵌套for循环的输出完全一致。
内容的提问来源于stack exchange,提问作者sonicboom
相关产品推荐
相关产品推荐

