沿轴的numpy和

沿轴的numpy和,numpy,sum,axis,Numpy,Sum,Axis,是否有一个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]],

是否有一个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]])
给sum打两次电话

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

从numpy 1.7.1开始,这里有一个更简单的答案-您可以将一个元组传递给sum方法的“axis”参数,以便在多个轴上求和。因此,除了给定的一个之外,所有的总和都是:

x.sum(tuple(j for j in xrange(x.ndim) if j!=i))

您只需传递一个元组,其中包含要求和的轴,而不包含要“求和”的轴:

>> a.sum(axis=(1,2))
array([ 6, 22, 38])
x.sum(tuple(j for j in xrange(x.ndim) if j!=i))
>> a.sum(axis=(1,2))
array([ 6, 22, 38])