我想将numpy.histogram()
应用于沿轴的多维数组。
比如说,我有一个2D数组,我想在histogram()
上应用axis=1
。
import numpy
array = numpy.array([[0.6, 0.7, -0.3, 1.0, -0.8], [0.2, -1.0, -0.5, 0.5, 0.8],
[0.25, 0.3, -0.1, -0.8, 1.0]])
bins = [-1.0, -0.5, 0, 0.5, 1.0, 1.0]
hist, bin_edges = numpy.histogram(array, bins)
print(hist)
[3 3 3 4 2]
[[1 1 0 2 1],
[1 1 1 2 0],
[1 1 2 0 1]]
如何获得预期的输出?
我尝试使用this post中建议的解决方案,但它并没有让我达到预期的输出。
答案 0 :(得分:0)
对于n-d个案,只需制作一个虚拟x轴(np.histogram2d
)即可对i
执行此操作:
def vec_hist(a, bins):
i = np.repeat(np.arange(np.product(a.shape[:-1]), a.shape[-1]))
return np.histogram2d(i, a.flatten(), (a.shape[0], bins)).reshape(a.shape[:-1], -1)
输出
vec_hist(array, bins)
Out[453]:
(array([[ 1., 1., 0., 2., 1.],
[ 1., 1., 1., 2., 0.],
[ 1., 1., 2., 0., 1.]]),
array([ 0. , 0.66666667, 1.33333333, 2. ]),
array([-1. , -0.5 , 0. , 0.5 , 0.9999999, 1. ]))
对于任意轴上的直方图,您可能需要使用i
和np.meshgrid
创建np.ravel_multi_axis
,然后使用它来重新生成结果直方图。