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
相关产品推荐
相关产品推荐

