Python中非标准化t分布采样疑问:stats.t.rvs参数使用是否正确?
关于Scipy中非标准化t分布采样的参数问题
嘿,这个参数顺序的坑很多人都踩过!直接用stats.t.rvs(a, b, c)是不正确的,因为Scipy的t.rvs()方法参数顺序和你想的不一样。
关键参数说明
Scipy的scipy.stats.t对应的是移位缩放后的非标准化t分布,但它的参数顺序是:
- 第一个必填参数是自由度(df),对应你说的
b - 第二个可选参数是
loc(位置参数),对应你的a - 第三个可选参数是
scale(尺度参数),对应你的c
如果不指定关键字,直接按位置传参的话,顺序是df, loc, scale,而不是你以为的loc, df, scale。
正确的采样写法
推荐用关键字参数来传,这样清晰不容易出错:
from scipy import stats # 假设你的参数:位置a=2,自由度b=5,尺度c=3 samples = stats.t.rvs(df=b, loc=a, scale=c, size=1000) # size是采样数量,按需调整
如果一定要按位置传参,得把自由度放在第一个:
samples = stats.t.rvs(b, a, c, size=1000)
补充说明
非标准化t分布的本质就是:loc + scale * 标准化t分布样本,Scipy的t.rvs()已经帮我们完成了这个计算,只要参数传对就能得到正确的采样结果。
内容的提问来源于stack exchange,提问作者Andriana
相关产品推荐
相关产品推荐

