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 AxisError
说 axis 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)
如有必要,这将首先将向量转换为单维二维矩阵。
我想对一个矩阵的所有行求和,因此,如果我有一个 n x 2
矩阵,结果应该是一个对所有行求和的 1 x 2
向量。我可以用 np.sum( arg, axis=1 )
做类似的事情,但是如果我提供一个向量作为参数,我会得到一个错误。是否有更通用的求和函数在提供向量时不会抛出错误?注意:这在 MATLAB 中从来不是问题。
背景:我写了一个函数来计算一些东西并对矩阵的所有行求和。根据输入的数量,矩阵有不同的行数,行数为>= 1
根据 numpy.sum documentation,你不能为向量指定 axis=1
因为你会得到一个 numpy AxisError
说 axis 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)
如有必要,这将首先将向量转换为单维二维矩阵。