求可实现数值区间分bin的简单内置函数(支持numpy等库方案)
区间分箱边界生成方案
核心实现
直接使用NumPy内置的numpy.linspace函数即可完美匹配需求,该函数原生支持在指定区间内生成等间隔的数值序列,自动适配整数、浮点类型的区间输入。
参数对应逻辑:
- 入参
start、end直接传入区间的起止值 - 序列长度设置为
bins + 1,即可生成包含首尾边界的所有分箱阈值
代码示例
基础调用
import numpy as np # 示例1:start=0, end=100, bins=4 boundary_1 = np.linspace(start=0, stop=100, num=4 + 1) print(tuple(boundary_1)) # 输出:(0.0, 25.0, 50.0, 75.0, 100.0) # 需要整数输出的话转类型即可:tuple(boundary_1.astype(int)) → (0, 25, 50, 75, 100)
整数边界适配
# 若需要严格匹配示例的整数分配规则,可单独做余数适配 def get_int_bins(start, end, bins): step = (end - start) / bins res = [start] for i in range(1, bins): res.append(round(start + i * step + 1e-9)) # 加极小值避免33.333这类值的舍入偏差 res.append(end) return tuple(res) print(get_int_bins(0,100,6)) # 输出:(0, 17, 34, 50, 67, 84, 100)
浮点区间支持
# 浮点区间示例:start=1.2, end=4.8, bins=4 float_boundary = np.linspace(start=1.2, stop=4.8, num=4 + 1) print(tuple(float_boundary)) # 输出:(1.2, 2.1, 3.0, 3.9, 4.8)
封装自定义函数
可以直接封装成你需要的调用形式:
def gen_bin_boundaries(start: float, end: float, bins: int, force_int: bool = False) -> tuple: if force_int: step = (end - start) / bins res = [start] for i in range(1, bins): res.append(round(start + i * step + 1e-9)) res.append(end) return tuple(res) return tuple(np.linspace(start=start, stop=end, num=bins + 1)) # 调用测试 print(gen_bin_boundaries(0, 100, 4)) print(gen_bin_boundaries(0, 100, 6, force_int=True))
内容的提问来源于stack exchange,提问作者Dor Cohen
相关产品推荐
相关产品推荐

