【问题标题】:sum over bin range in python在python中对bin范围求和
【发布时间】:2011-08-05 02:43:06
【问题描述】:

我有一个形状为 numpy 的数组:

In: imar.shape 
Out: (21, 77, 10000)

我想要最后一个轴上的分箱总和,每个箱包含 20 个项目。

我现在这样做的方式是:

np.sum(  imar.reshape([-1,500,20]), axis=2 ).reshape(imar.shape[:2])

它很快,但如果我得到重塑错误的论点,似乎很容易出错。有没有更好的方法来做到这一点?

我查看了 np.digitize、histogram、bincount 和其他一些,但这些都是基于值的;我想对一组范围求和。

【问题讨论】:

  • 如果你担心参数错误,你为什么不能把它做成一个函数呢?
  • imar.shape[-1]/20 替换500 并断言imar.shape[-1]%20 为零,我认为你是可靠的。你可以通过imar.shape = (x,y,z) 来进一步加快速度,而不是调用更昂贵的reshape
  • 谢谢,我会按照“binsum(array, axis=?, bins=[?])”的方式写一个函数...我想我希望有一些更优雅的方式因为重塑方法对我来说似乎很难看。谢谢。

标签: python numpy


【解决方案1】:

你有正确的方法。不久前我问了一个类似的问题:

How can I efficiently process a numpy array in blocks similar to Matlab's blkproc (blockproc) function

有几种方法可以处理重塑。如果你小心并编写一个函数来做到这一点,你会没事的。当然,如果输入矩阵不是块大小的整数倍,则需要确保修剪输入矩阵。

【讨论】:

  • 谢谢,链接的答案真的很有帮助,而且是一个很好的通用解决方案。另外,我通过阅读有关 strides 的链接学到了很多东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2011-12-16
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多