首页 > 解决方案 > 如何简单地为 numpy 直方图设置替代不等式条件?

问题描述

根据numpy 文档中的示例

>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))

查看1,我们注意到在第二个 bin 中有两次出现,这意味着这些 bin 被视为 range left <= x_i < right。假设有人想这样切换left < x_i <= right。有没有一种简单的方法可以在 numpy 中做到这一点?

标签: pythonpython-3.xnumpyhistograminequality

解决方案


np.histogram()用于np.searchsorted(..., side='right')计算每个样本值的 bin 编号。所以你可以这样做:

import numpy as np

data = [1, 2, 1]
bins = [0, 1, 2, 3]

hist = np.zeros(len(bins) - 1, dtype=int)
bin_numbers = np.searchsorted(bins, data, side='left')
for idx, val in zip(*np.unique(bin_numbers, return_counts=True)):
    hist[idx - 1] = val

result = hist, bins

result是:

(array([2, 1, 0]), [0, 1, 2, 3])

推荐阅读