You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Matlab中3D矩阵指定维度求和结果维度不一致问题求助

解决Matlab sum函数求和后维度不一致的问题

嘿,这个问题我之前也踩过坑!Matlab的sum函数在处理不同维度求和时的输出形状确实有个小细节需要注意——你遇到的情况是因为Matlab默认的行为:当对最后一个维度求和时,会自动去掉那个长度变为1的维度,返回低维矩阵;而对前面的维度求和时,会保留该维度(即使长度为1),维持原有的维度数。

想要让sum1sum2也像sum3一样输出2D矩阵,有两种简单的方法:

方法1:使用squeeze函数挤压维度

squeeze的作用就是去掉矩阵中所有长度为1的维度,正好能解决你的问题:

x = rand(5,3,2);
sum1 = squeeze(sum(x,1)); % 原本是1×3×2,挤压后变成3×2的2D矩阵
sum2 = squeeze(sum(x,2)); % 原本是5×1×2,挤压后变成5×2的2D矩阵
sum3 = sum(x,3); % 原本就是5×3的2D矩阵

验证一下形状:size(sum1)会返回[3,2],完全符合你的预期。

方法2:在sum中指定'keepdims'参数为false

Matlab的sum函数支持通过'keepdims'参数控制是否保留求和后的维度。当设置为false时,求和后会自动去掉那个长度为1的维度,直接返回低维结果:

x = rand(5,3,2);
sum1 = sum(x,1,'keepdims',false); % 直接得到3×2的2D矩阵
sum2 = sum(x,2,'keepdims',false); % 直接得到5×2的2D矩阵
sum3 = sum(x,3); % 保持原有结果

这种方法更直接,不需要额外调用squeeze,一步到位。

两种方法的小区别

  • squeeze会去掉所有长度为1的维度,如果你的矩阵有多个维度长度为1,它会一次性全部去掉;
  • 'keepdims',false只会去掉你当前求和的那个维度,其他长度为1的维度会保留(不过在你的场景里两种方法效果完全一致)。

内容的提问来源于stack exchange,提问作者Tulkkas

火山引擎 最新活动