You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整scipy.stats.randint的步长以生成更大步进的离散均匀分布

步长大于1的冻结离散均匀分布scipy实现方案

可以通过scipy直接实现该需求,效果和hyperopt的hp.uniformint完全匹配,兼容scipy原生stats.randint的使用习惯。

实现原理

hp.uniformint的本质是生成取值为 low, low+q, low+2q,... ≤high的等概率离散值,我们可以对scipy的stats.randint做线性变换实现该逻辑,同时支持冻结分布操作。

代码示例

以生成步长为2、取值范围为[2,10](取值为2、4、6、8、10)的冻结分布为例:

from scipy.stats import randint

# 自定义参数
low = 2       # 最小值
high = 10     # 最大值
q = 2         # 步长

# 计算映射用的randint区间长度
n = int((high - low) / q) + 1
# 生成冻结分布
frozen_qrandint = low + q * randint(0, n)

功能验证

生成的冻结分布支持scipy分布的所有原生API,符合使用预期:

  • 生成随机样本:调用frozen_qrandint.rvs(10)可生成10个符合分布的随机值,所有值均为目标区间内步长对齐的整数,且各取值概率均等
  • 计算概率质量:调用frozen_qrandint.pmf(4)返回值为0.2,对应5个取值各20%的概率
  • 计算累计分布:调用frozen_qrandint.cdf(6)返回值为0.6,对应小于等于6的取值共3个,占总取值数的60%

注意事项

  • 需确保(high - low)可以被步长q整除,避免出现无法取到high边界值的情况,若不能整除可自行调整high为区间内最大符合步长对齐规则的值
  • 该实现完全兼容scipy冻结分布的所有接口,和原生stats.randint用法一致,无需额外适配

内容的提问来源于stack exchange,提问作者abdelgha4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:21:02