我想反复总结一个numpy ndarray的不同维度,例如。
#what I've got
sumOverDims = [6 4 2 1]
ndarray = any n-dimensional numpy array
#what I want to do
ndarray.sum(6).sum(4).sum(2).sum(1)
如果没有丑陋的循环,我怎么能这样做?
答案 0 :(得分:4)
Numpy的sum
接受axis
参数的元组:
ndarray.sum(axis=(1,2,4,6))
答案 1 :(得分:1)
一般来说,像是
X.f(e0).f(e1).f(e2).…
可以改写为
reduce(lambda a, b: a.f(b), [ e0, e1, e2, … ], X)
或(如果你不喜欢lambdas):
def f_(a, b): return a.f(b)
reduce(f_, [ e0, e1, e2, … ], X)
但我有点怀疑这是否真的使它比使用迭代循环更具可读性和更有效的清晰度(因此更加Pythonic):
result = X
for e in [ e0, e1, e2, … ]:
result = result.f(e)
return result
我想这可以归结为品味和你更习惯的事情。
答案 2 :(得分:0)
您可以使用reduce
。仅包含两个维度的示例:
>>> A = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> reduce(numpy.sum, [1], A)
array([ 6, 15, 24])
>>> reduce(numpy.sum, [1, 0], A)
45
reduce
的参数是numpy
的{{1}}函数,一个包含要求总和的列表,sum
数组numpy
作为要减少的初始要素。该函数将(部分求和的)A
数组和下一个求和的维度作为参数。