【问题标题】:numpy sum along axis沿轴的numpy总和
【发布时间】:2011-08-21 19:29:52
【问题描述】:

是否有一个 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]])

【问题讨论】:

    标签: numpy sum axis


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以只传递一个包含要求和的轴的元组,而忽略要“求和”的轴:

      >> a.sum(axis=(1,2))
      array([ 6, 22, 38])
      

      【讨论】:

        【解决方案3】:

        调用 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
        

        【讨论】:

          【解决方案4】:
          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)
          

          【讨论】:

            【解决方案5】:
            np.apply_over_axes(sum, a, [1,2]).ravel()
            

            【讨论】:

              猜你喜欢
              • 2017-07-08
              • 2021-06-04
              • 1970-01-01
              • 1970-01-01
              • 2017-06-03
              • 2017-09-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多