【发布时间】: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=[?])”的方式写一个函数...我想我希望有一些更优雅的方式因为重塑方法对我来说似乎很难看。谢谢。