numpy 沿着轴的数值和

rqqzpn5f  于 2024-01-08  发布在  其他
关注(0)|答案(5)|浏览(175)

有没有一个numpy函数可以对一个数组 * 沿着 *(而不是超过)一个给定的轴求和?通过沿着一个轴,我的意思是等价于:

  1. [x.sum() for x in arr.swapaxes(0,i)].

字符串
沿沿着 * 轴i求和 *。
例如,numpy.sum不能直接工作的情况:

  1. >>> a = np.arange(12).reshape((3,2,2))
  2. >>> a
  3. array([[[ 0, 1],
  4. [ 2, 3]],
  5. [[ 4, 5],
  6. [ 6, 7]],
  7. [[ 8, 9],
  8. [10, 11]]])
  9. >>> [x.sum() for x in a] # sum along axis 0
  10. [6, 22, 38]
  11. >>> a.sum(axis=0)
  12. array([[12, 15],
  13. [18, 21]])
  14. >>> a.sum(axis=1)
  15. array([[ 2, 4],
  16. [10, 12],
  17. [18, 20]])
  18. >>> a.sum(axis=2)
  19. array([[ 1, 5],
  20. [ 9, 13],
  21. [17, 21]])

aelbi1ox

aelbi1ox1#

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

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

字符串

xkftehaa

xkftehaa2#

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

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

字符串

nafvub8i

nafvub8i3#

打两次电话给萨姆?

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

字符串
当然,这样概括起来会有点尴尬,因为坐标轴“消失”了。你需要它是通用的吗?

  1. def sum_along(a, axis=0):
  2. js = [axis] + [i for i in range(len(a.shape)) if i != axis]
  3. a = a.transpose(js)
  4. while len(a.shape) > 1: a = a.sum(axis=1)
  5. return a

展开查看全部
c9qzyr3d

c9qzyr3d4#

  1. def sum_along_axis(a, axis=None):
  2. """Equivalent to [x.sum() for x in a.swapaxes(0,axis)]"""
  3. if axis is None:
  4. return a.sum()
  5. return np.fromiter((x.sum() for x in a.swapaxes(0,axis)), dtype=a.dtype)

字符串

yshpjwxd

yshpjwxd5#

  1. np.apply_over_axes(sum, a, [1,2]).ravel()

字符串

相关问题