numpy 数字化二维直方图

问题描述

我正在搜索二维直方图的 np.digitize 函数

从这些代码行:

    H,xedges,yedges = np.histogram2d(coord[:,0],coord[:,1])
    H = H.T
    print(H)

我得到以下直方图:

[[ 7. 20. 16. 14. 10.  8. 16.  7. 10.  7.]
 [11. 11. 10. 10.  5. 10.  9. 12.  7.  7.]
 [13. 11. 13.  9. 13. 10. 14.  6.  9.  9.]
 [ 5.  5.  4.  5.  7. 13. 14. 11.  6. 10.]
 [14.  4. 11.  5.  7. 14.  6. 11. 11.  5.]
 [12.  9.  5.  7.  9. 14. 15. 15. 13. 12.]
 [ 5. 13. 15.  9. 10.  7. 10. 12.  7.  5.]
 [ 4. 10. 15.  7.  6. 10. 13.  5. 12. 12.]
 [12.  6. 11.  8.  5.  5. 13. 14. 13.  9.]
 [10. 11.  9.  8. 18. 13. 16.  8.  8. 13.]]

我想找出直方图的每个元素代表的索引,例如(应该计算第一行,第一列 -> 7 -> 7 个索引)。 我花了很多时间试图遵循 this post,但我被困在一个地方(如果没有更好的方法,我可以解释在哪里)。另一个潜在的重复项是 here,但这也不能解决问题。

那么有人知道如何解决这个问题吗?

谢谢!

解决方法

你想要scipy.stats.binned_statistic_2d

H,xedges,yedges,binnumber = scipy.stats.binned_statistic_2d(
    coord[:,0],coord[:,1],None,'count',expand_binnumbers=True)

前三个返回值与您的原始代码相同。第四个 (binnumber)` 是:

一个形状 (2,N) ndarray,其中每一行给出对应维度中的 bin 编号。