【发布时间】:2011-01-09 19:24:27
【问题描述】:
将数值分箱到一定范围内的好方法是什么?例如,假设我有一个值列表,我想按它们的范围将它们放入 N 个 bin 中。现在,我做这样的事情:
from scipy import *
num_bins = 3 # number of bins to use
values = # some array of integers...
min_val = min(values) - 1
max_val = max(values) + 1
my_bins = linspace(min_val, max_val, num_bins)
# assign point to my bins
for v in values:
best_bin = min_index(abs(my_bins - v))
其中 min_index 返回最小值的索引。这个想法是,您可以通过查看它与哪个 bin 的差异最小来找到该点所在的 bin。
但我认为这有奇怪的边缘情况。我正在寻找的是一个很好的垃圾箱表示,理想情况下是半封闭半开的垃圾箱(这样就无法将一个点分配给两个垃圾箱),即
bin1 = [x1, x2)
bin2 = [x2, x3)
bin3 = [x3, x4)
etc...
使用 numpy/scipy 在 Python 中执行此操作的好方法是什么?我在这里只关心对整数值进行分箱。
非常感谢您的帮助。
【问题讨论】:
-
附带说明:如果 matplotlib 具有此功能,除了 scipy/numpy 之外,我更愿意使用它。我猜像'hist'这样的函数必须做这样的事情,除了这里我不是在寻找任何绘图。
标签: python numpy scipy binning