numpy.linspace生成等间距分箱异常求助:如何生成0-100万间20个20k分箱
解决Numpy生成等间距20k分箱的问题
嘿,我来帮你搞定这个分箱生成的小问题!你遇到的情况其实是对numpy.linspace的参数理解有点偏差——linspace的第三个参数是要生成的点的总数,而不是步长。所以如果你之前用了类似np.linspace(0, 1000000, 20)的写法,得到的间距会是1000000/(20-1)≈52631,自然不是你想要的20000步长。
要生成20000、40000、60000……1000000这种严格按20k递增的序列,有两种简单靠谱的方法:
方法1:用numpy.arange(最直接)
arange就是专门按步长生成序列的函数,用法非常直观:
import numpy as np # 从20000开始,每次加20000,直到包含1000000(左闭右开,所以结束值设为1000001) bins = np.arange(20000, 1000001, 20000)
这样生成的序列正好是你要的20000, 40000, ..., 1000000,一共50个值(因为1000000/20000=50)。如果需要包含起始点0(比如做统计分箱的区间边界),只需要把起始值改成0:
bins_with_zero = np.arange(0, 1000001, 20000)
方法2:用numpy.linspace(调整参数)
如果你非要用linspace,那得先算清楚需要生成多少个点。从20000到1000000,步长20000,总共有(1000000 - 20000)/20000 + 1 = 50个点。所以写法是:
bins = np.linspace(20000, 1000000, 50)
这样生成的序列和arange的结果完全一致,而且是严格等间距的。
内容的提问来源于stack exchange,提问作者wilson_smyth




