是否有一个numpy函数可以将沿(未结束)与给定轴相加?沿着轴,我的意思相当于:
[x.sum() for x in arr.swapaxes(0,i)].
将沿轴i。
加起来例如,numpy.sum无法直接工作的情况:
>>> a = np.arange(12).reshape((3,2,2))
>>> a
array([[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11]]])
>>> [x.sum() for x in a] # sum along axis 0
[6, 22, 38]
>>> a.sum(axis=0)
array([[12, 15],
[18, 21]])
>>> a.sum(axis=1)
array([[ 2, 4],
[10, 12],
[18, 20]])
>>> a.sum(axis=2)
array([[ 1, 5],
[ 9, 13],
[17, 21]])
答案 0 :(得分:3)
打电话两次?
In [1]: a.sum(axis=1).sum(axis=1)
Out[1]: array([ 6, 22, 38])
当然,由于轴“消失”,这有点尴尬。你需要一般吗?
def sum_along(a, axis=0):
js = [axis] + [i for i in range(len(a.shape)) if i != axis]
a = a.transpose(js)
while len(a.shape) > 1: a = a.sum(axis=1)
return a
答案 1 :(得分:3)
从numpy 1.7.1开始,这里有一个更简单的答案 - 你可以将一个元组传递给"轴"和方法的参数对多个轴求和。所以总结除了给定的一个:
x.sum(tuple(j for j in xrange(x.ndim) if j!=i))
答案 2 :(得分:2)
def sum_along_axis(a, axis=None):
"""Equivalent to [x.sum() for x in a.swapaxes(0,axis)]"""
if axis is None:
return a.sum()
return np.fromiter((x.sum() for x in a.swapaxes(0,axis)), dtype=a.dtype)
答案 3 :(得分:2)
np.apply_over_axes(sum, a, [1,2]).ravel()
答案 4 :(得分:2)
你可以传递一个带有你想要求和的轴的元组,并省去你想要“求和”的那个:
>> a.sum(axis=(1,2))
array([ 6, 22, 38])