这是我当前的代码:
M = np.array([[1, 2, 3],
[4, 5, 6]])
def np_sum_rows(M):
rows = []
for i in range(len(M)):
rows = M[i, 0:len(M[0])
return rows.sum()
我希望函数返回一个向量[6 15]。然而,for循环只能存储并返回15。我确实被这个问题难住了,除了使用for循环之外,我想不出任何其他方法。
您可以应用来自函数式编程背景的reduce
方法。这在Python和基于numpy
的方式中都是可能的。
在Python中,你需要将两个参数的函数累加到序列的项上。
import functools
M = M.tolist() #convert array to list in order to make iteration faster
[reduce(lambda x, y: x+y, m) for m in M]
>>> [6, 15]
在numpy
中,通常不需要定义函数。通用函数(简称ufunc
),如add
、multiply
等被使用。
np.add.reduce(M, axis=1)
>>> array([ 6, 15])
注意,更常见的方法是在轴1上应用np.sum
。因此,强烈建议您习惯numpy
轴的概念。