python中的numpy标准正态分布_如何在numpy范围内获得正态分布?

在机器学习任务中.我们应该得到一组带有边界的随机w.r.t正态分布.我们可以使用np.random.normal()获得正态分布数,但它不提供任何绑定参数.我想知道怎么做?

解决方法:

truncnorm的参数化很复杂,所以这里有一个将参数化转换为更直观的函数:

from scipy.stats import truncnorm

def get_truncated_normal(mean=0, sd=1, low=0, upp=10):

return truncnorm(

(low - mean) / sd, (upp - mean) / sd, loc=mean, scale=sd)

如何使用它?

>使用参数实例化生成器:平均值,标准偏差和截断范围:

>>> X = get_truncated_normal(mean=8, sd=2, low=1, upp=10)

>然后,您可以使用X生成值:

>>> X.rvs()

6.0491227353928894

>或者,具有N个生成值的numpy数组:

>>> X.rvs(10)

array([ 7.70231607, 6.7005871 , 7.15203887, 6.06768994, 7.25153472,

5.41384242, 7.75200702, 5.5725888 , 7.38512757, 7.47567455])

一个可视化示例

以下是三种不同截断正态分布的图:

X1 = get_truncated_normal(mean=2, sd=1, low=1, upp=10)

X2 = get_truncated_normal(mean=5.5, sd=1, low=1, upp=10)

X3 = get_truncated_normal(mean=8, sd=1, low=1, upp=10)

import matplotlib.pyplot as plt

fig, ax = plt.subplots(3, sharex=True)

ax[0].hist(X1.rvs(10000), normed=True)

ax[1].hist(X2.rvs(10000), normed=True)

ax[2].hist(X3.rvs(10000), normed=True)

plt.show()

标签:python,numpy,machine-learning,random,normal-distribution

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值