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

使用Scipy uniform采样未得到均匀分布结果的问题排查

问题根源:scipy.stats.uniform的参数理解错误

你犯了一个典型的参数使用错误:scipy.stats.uniform的第二个参数不是分布的上限,而是区间的长度(scale)。它的定义是uniform(loc, scale),其中:

  • loc:分布的起始点(下限)
  • scale:分布区间的总长度

你当前的代码uniform(-np.pi, np.pi),实际定义的是从-np.pi开始、长度为np.pi的区间,也就是**[-π, 0]**,这就解释了为什么采样几乎全是负数,完全取不到大于0的值,导致你的while循环永远退不出来。

修正方案

要生成[-π, π]区间的均匀分布,区间长度是π - (-π) = 2π,所以需要把scale设为2*np.pi:

import numpy as np
from scipy.stats import uniform

# 正确定义:loc=-π,区间长度2π
uni = uniform(-np.pi, 2 * np.pi)
variables = uni.rvs(10)

运行修正后的代码,就能得到正负均匀分布的结果,示例输出:

>>> uni.rvs(10)
array([ 1.124, -2.567,  0.689, -1.432,  2.876,
       -0.912,  3.001, -2.045,  0.798, -1.265 ])

此时你的while循环也能正常退出:

i=0
while i <=0.4:
    i = uni.rvs()
更直观的替代方案

如果觉得scipy的参数逻辑容易混淆,也可以直接用numpy的random.uniform,它的参数是low(下限)和high(上限),更符合直觉:

variables = np.random.uniform(-np.pi, np.pi, 10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:21:04