Python 从N个均值和N个sigma的列表中生成N个样本的数组
我有一个大小为N的numpy数组,其中包含[x,y]像素位置。我想在x和y方向上稍微移动每个像素。我想要实现的是使用每个x值作为平均值,并随机从具有可配置sigma的正态分布中选择其周围的新值。对于新的y值也将执行相同的操作 我的问题是,我必须为每个像素循环,并乏味地使用以下内容:Python 从N个均值和N个sigma的列表中生成N个样本的数组,python,numpy,random,Python,Numpy,Random,我有一个大小为N的numpy数组,其中包含[x,y]像素位置。我想在x和y方向上稍微移动每个像素。我想要实现的是使用每个x值作为平均值,并随机从具有可配置sigma的正态分布中选择其周围的新值。对于新的y值也将执行相同的操作 我的问题是,我必须为每个像素循环,并乏味地使用以下内容: for i in range(len(pixels)): pixel = pixels[i] x = pixel[0] y = pixel[1] new_x = numpy.rando
for i in range(len(pixels)):
pixel = pixels[i]
x = pixel[0]
y = pixel[1]
new_x = numpy.random.normal(x, std_deviation_x)
new_y = numpy.random.normal(y, std_deviation_y)
pixel[i][0] = new_x
pixel[i][1] = new_y
我想知道是否有一种方法或任何随机函数实现可以接受均值列表和sigma列表来返回N个样本的列表,其中每个样本在列表中具有相应的平均值和sigma您可以只从均值为0的正态分布中采样,然后将值移动到新的平均值 稍微清理和改进代码,应该是这样的
# We create all new (x,y) in one go
rand_x = numpy.random.normal(0, std_deviation_x, len(pixels))
rand_y = numpy.random.normal(0, std_deviation_y, len(pixels))
for i in range(len(pixels)):
x, y = pixels[i] # using unpacking
# now we shift the mean
new_x = x + rand_x[i]
new_y = y + rand_y[i]
# reasignment
pixels[i][0] = new_x
pixels[i][1] = new_y
当然,这可以进一步改进并使其更加优化,但仍有一些多余的赋值。scipy.stats.norm接受向量参数:
>>> from scipy import stats
>>>
# mean = 0, 1, -1 - std = 1, 2, 2
# we draw 10,000 samples per parameter set to validate the mean ...
>>> stats.norm([0, 1, -1], [1, 2, 2]).rvs((10000, 3)).mean(axis=0)
array([ 0.02597611, 1.01131576, -0.9446429 ])
# ... and the std
>>> stats.norm([0, 1, -1], [1, 2, 2]).rvs((10000, 3)).std(axis=0)
array([ 0.99299587, 2.0055516 , 1.99656472])
# if you need just one sample per parameter set:
>>> stats.norm([0, 1, -1], [1, 2, 2]).rvs()
array([-1.23528454, 3.77990026, -3.49572846])
您是否尝试过将均值和符号列表传递给np.random.normal?它接受数组?