12个3x3矩阵批量取整后输出维度错误代码问题咨询
问题原因
- 索引和三维矩阵的维度对应关系完全错位:你用遍历12个矩阵的序号变量
i作为新矩阵的行维度索引,每次循环都往newmatrix的第i行写入数据,循环12次后行维度自然被拉长到12,不符合预期的3行行数。 - 冗余变量
c在代码中全程没有被使用,属于无效代码。 - 没有提前初始化输出矩阵,Matlab会自动动态扩容矩阵,也是容易出现维度异常的诱因之一。
修复方案
最优方案(向量化运算,无需循环)
Matlab的round函数原生支持高维矩阵批量运算,直接一行代码即可完成所有矩阵的取整操作,输出维度和原输入完全一致:
newmatrix = round(G_SUB_A3_N1, 8, 'decimal');
兼容循环的写法
如果必须保留循环逻辑,只需把矩阵序号对应到正确的维度即可,假设你原始的12个3×3矩阵以[行, 列, 矩阵序号]的结构存储在G_SUB_A3_N1中(维度为3×3×12),正确写法如下:
% 先初始化和原矩阵维度一致的输出矩阵,避免动态扩容 newmatrix = zeros(size(G_SUB_A3_N1)); % 遍历12个矩阵,对应第三个维度 for mat_idx = 1:12 newmatrix(:,:,mat_idx) = round(G_SUB_A3_N1(:,:,mat_idx), 8, 'decimal'); end
内容的提问来源于stack exchange,提问作者mourcheh joon
相关产品推荐
相关产品推荐

