如何实现通用numpy矩阵行求和,传入向量时不触发报错
Numpy通用行求和兼容方案
你当前使用np.sum(arg, axis=1)报错的核心原因是:numpy支持1维数组存在,当输入为长度为2的1维向量(shape为(2,))时,不存在axis=1这个维度,因此触发维度错误;而MATLAB默认所有数组最低为2维,因此不会出现该问题。
以下是两种通用兼容方案:
方案1:输出严格为1×2的2维向量(和MATLAB行为完全一致)
通过np.atleast_2d先将输入统一转为最低2维的数组,再沿行维度(axis=0)求和,开启keepdims参数保持输出维度:
import numpy as np def general_row_sum(input_arr): # 自动兼容1维/2维输入,1维向量会转为shape为(1, 2)的2维数组 arr_2d = np.atleast_2d(input_arr) # 沿行维度求和,保持2维输出 return arr_2d.sum(axis=0, keepdims=True)
测试效果:
- 输入3×2矩阵
np.array([[1,2],[3,4],[5,6]]),输出为array([[ 9, 12]]),符合1×2要求 - 输入1维向量
np.array([1,2]),输出为array([[1,2]]),无报错 - 输入1×2的2维向量
np.array([[1,2]]),输出为array([[1,2]]),完全兼容
方案2:输出可接受长度为2的1维向量
如果不需要严格的2维输出,直接使用np.sum(input_arr, axis=0)即可,天然兼容1维/2维输入:
- 输入n×2矩阵时,输出长度为2的1维数组
- 输入1维向量时,直接返回向量本身,无报错
内容的提问来源于stack exchange,提问作者Steradiant
相关产品推荐
相关产品推荐

