You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB sum函数转Python后维度不符问题求助

问题:MATLAB转Python后求和结果维度不符

原MATLAB代码:

% T2 = (sum((log(X(1:m,:)))'));

转换后的Python代码:

T2 = sum(np.log(X[0:int(m),:]).T)

相关数据定义:

f1 = np.float64(135)
f2 = np.float64(351)
X = np.float64(p[:, int(f1):int(f2)])
m = 103

问题描述:
对np.log(X[0:int(m), :]).T应用sum前,Python结果的数值和维度(216x103)与MATLAB完全一致;但应用sum后,数值正确但维度为一维数组(103,)(表现为类似103x1的形式),需要的正确维度是1x103的二维行向量,尝试求和后转置无效。

解决建议

方法1:直接按行求和并调整维度

MATLAB代码的逻辑本质是对log(X(1:m,:))的每行元素求和,最终得到行向量。在numpy中可以直接指定求和轴,再通过np.newaxis添加维度:

T2 = np.sum(np.log(X[:m, :]), axis=1)[np.newaxis, :]
  • axis=1表示对每行求和,得到一维数组(103,)
  • [np.newaxis, :]将一维数组转换为二维行数组(1, 103)

方法2:先转置求和再调整维度

如果坚持保留先转置的逻辑,需使用numpy的np.sum而非Python内置sum,并指定求和轴后调整维度:

T2 = np.sum(np.log(X[:m, :]).T, axis=0)[np.newaxis, :]
  • np.sum(..., axis=0)对转置后的矩阵按列求和,得到一维数组(103,)
  • 同样通过np.newaxis将其转为(1, 103)的行向量

为什么求和后转置无效?

Python中一维数组的转置不会改变其形状((103,).T仍为(103,)),必须先将其转换为二维数组再转置,比如:

# 等价于方法1的写法
T2 = np.sum(np.log(X[:m, :]), axis=1).reshape(1, -1)

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:19:47