Python:从NxM正态分布中提取的NxM样本数组



我有两个二维数组(或更高维度的),一个定义平均值(M),另一个定义标准偏差(S)。是否有一个python库(numpy,scipy,...?)允许我生成一个数组(X),其中包含从相应发行版中提取的样本?

换句话说:每个条目 x ij 都是来自由相应的平均值 m ij 和标准差 sij 定义的正态分布的样本。

是的,numpy可以在这里提供帮助:

有一个接受类似数组的输入的np.random.normal函数:

import numpy as np
means = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
stddevs = np.ones(10) # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
samples = np.random.normal(means, stddevs)
array([-1.69515214, -0.20680708, 0.61345775, 2.98154162, 2.77888087,        7.22203785,  5.29995343,  8.52766436,  9.70005434,  9.58381479])

即使它们是多维的:

means = np.arange(10).reshape(2,5) # make it multidimensional with shape 2, 5
stddevs = np.ones(10).reshape(2,5)
samples = np.random.normal(means, stddevs)
array([[-0.76585438, 1.22226145, 2.85554809, 2.64009423, 4.67255324],       [ 3.21658151,  4.59969355,  6.87946817,  9.14658687,  8.68465692]])

第二个形状为(2,5)


如果您只想要不同的均值但相同的标准偏差,您也可以只传递一个数组和一个标量,并且仍然可以获得具有正确形状的数组:

means = np.arange(10)
samples = np.random.normal(means, 1)
array([ 0.54018686, -0.35737881, 2.08881115, 3.08742942, 4.4426366 ,        3.6694955 ,  5.27515536,  8.68300816,  8.83893819,  7.71284217])

最新更新