如何简单地为 numpy 直方图设置替代的不等式条件?
How to simply set alternate inequality conditions for numpy histogram?
根据 example in the numpy documentation、
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
查看 1
,我们注意到在第二个 bin 中出现了两次,这意味着 bin 被认为是范围 left <= x_i < right
。假设有人想将其切换为 left < x_i <= right
。在 numpy 中有没有简单的方法来做到这一点?
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])
根据 example in the numpy documentation、
>>> np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]))
查看 1
,我们注意到在第二个 bin 中出现了两次,这意味着 bin 被认为是范围 left <= x_i < right
。假设有人想将其切换为 left < x_i <= right
。在 numpy 中有没有简单的方法来做到这一点?
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])