Python:numpy 行的总和

Python: general sum over numpy rows

我想对一个矩阵的所有行求和,因此,如果我有一个 n x 2 矩阵,结果应该是一个对所有行求和的 1 x 2 向量。我可以用 np.sum( arg, axis=1 ) 做类似的事情,但是如果我提供一个向量作为参数,我会得到一个错误。是否有更通用的求和函数在提供向量时不会抛出错误?注意:这在 MATLAB 中从来不是问题。

背景:我写了一个函数来计算一些东西并对矩阵的所有行求和。根据输入的数量,矩阵有不同的行数,行数为>= 1

根据 numpy.sum documentation,你不能为向量指定 axis=1 因为你会得到一个 numpy AxisErroraxis 1 is out of bounds for array of dimension 1.

一个可能的解决方法是,例如,编写一个专用函数在执行求和之前检查大小。请在下面找到一个可能的实现:

import numpy as np

M = np.array([[1, 4],
             [2, 3]])

v = np.array([1, 4])

def sum_over_columns(input_arr):
    if len(input_arr.shape) > 1:
        return input_arr.sum(axis=1)
    return input_arr.sum()

print(sum_over_columns(M))
print(sum_over_columns(v))

以更pythonic的方式(不一定更具可读性):

def oneliner_sum(input_arr):
    return input_arr.sum(axis=(1 if len(input_arr.shape) > 1 else None))

你可以做到

np.sum(np.atleast_2d(x), axis=1)

如有必要,这将首先将向量转换为单维二维矩阵。