Python:从 NxM 正态分布中抽取的 NxM 样本数组
Python: NxM array of samples drawn from NxM normal distributions
我有两个二维数组(或更高维度),一个定义平均值 (M),一个定义标准偏差 (S)。是否有 python 库(numpy、scipy、...?)允许我生成一个数组 (X),其中包含从相应分布中抽取的样本?
换句话说:每个条目 xij 是来自相应均值 mij 定义的正态分布的样本,并且标准差 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])
我有两个二维数组(或更高维度),一个定义平均值 (M),一个定义标准偏差 (S)。是否有 python 库(numpy、scipy、...?)允许我生成一个数组 (X),其中包含从相应分布中抽取的样本?
换句话说:每个条目 xij 是来自相应均值 mij 定义的正态分布的样本,并且标准差 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])