如何用Numpy生成指定均值和标准差的随机数组?
如何用Numpy生成指定均值和标准差的随机数组
嘿,这个问题其实很好解决!你现在用的np.random.randn()生成的是标准正态分布的随机数——也就是均值为0、标准差为1的分布。要得到任意均值和标准差的正态分布数组,只需要做个简单的线性变换就行,或者直接用Numpy提供的更直观的函数。
方法一:线性变换(基于randn)
标准正态分布的随机数,经过「乘以目标标准差 + 加上目标均值」的变换后,就能得到你想要的分布。公式是:
目标数组 = 预设均值 + 预设标准差 × np.random.randn(样本数量)
举个实际的例子,假设你想要均值为5、标准差为2的1000个随机数,代码可以改成这样:
import numpy as np # 定义你需要的参数 target_mean = 5 target_std = 2 sample_size = 1000 # 生成符合要求的数组 x = target_mean + target_std * np.random.randn(sample_size) # 验证结果(因为是随机数,会和目标值有微小误差,样本量越大越接近) print("Average:") print(x.mean()) print("Standard deviation:") print(x.std())
方法二:直接用np.random.normal()
Numpy其实提供了更直接的函数np.random.normal(),可以直接指定均值(loc参数)、标准差(scale参数)和样本数量,代码更易读:
import numpy as np target_mean = 5 target_std = 2 sample_size = 1000 # 直接生成指定分布的数组 x = np.random.normal(loc=target_mean, scale=target_std, size=sample_size) # 验证 print("Average:", x.mean()) print("Standard deviation:", x.std())
这两种方法本质是等价的,np.random.normal()底层也是类似的线性变换逻辑,不过第二种写法更清晰,适合直接指定参数的场景。
注意:因为是随机采样,计算出来的均值和标准差会和你预设的值有一点点偏差,这是正常的统计现象——当样本数量越大时,这个偏差会越小。
内容的提问来源于stack exchange,提问作者EORS
相关产品推荐
相关产品推荐

