Python 高斯随机分布的奇异行为

Python 高斯随机分布的奇异行为,python,random,gaussian,Python,Random,Gaussian,我正在运行一段代码,其目的是将一个浮点数列表/数组和一个相同长度的关联列表/数组作为“错误”,并根据高斯分布对第一个列表进行无序排列 这是代码的MWE: import random import numpy as np def random_data(N, a, b): # Generate some random data. return np.random.uniform(a, b, N).tolist() # Obtain values for x. x = rando

我正在运行一段代码,其目的是将一个浮点数列表/数组和一个相同长度的关联列表/数组作为“错误”,并根据高斯分布对第一个列表进行无序排列

这是代码的
MWE

import random
import numpy as np

def random_data(N, a, b):
    # Generate some random data.
    return np.random.uniform(a, b, N).tolist()

# Obtain values for x.
x = random_data(100, 0., 1.)
# Obtain error/sigma values for x.
x_sigma = random_data(100, 0., 0.2)

# Generate new x values shuffling each float around a
# Gaussian distribution with a given sigma.
x_gauss = random.gauss(np.array(x), np.array(x_sigma))

print x-x_gauss
我发现,执行
x-x_gauss
的结果是一个浮动列表,始终为正或负。这意味着
random.gauss
调用总是为
x
中的每个浮点分配一个较大的新值,或者为
x
中的所有值分配一个较小的新值

我希望
random.gauss
调用将
x
中的浮点值左右移动,因为这是一个随机过程

为什么没有发生这种情况?我对流程的理解有误吗?

这是:

注意,is正在为
z
生成一个值,并返回
mu+z*sigma
。 由于
mu
sigma
是numpy数组,因此此计算是按元素进行的。由于
sigma
为正,移位
z*sigma
始终为正或负,具体取决于
z


如果您使用的是NumPy,除非有特殊原因,否则我将使用
np.random
模块生成这些值。这比使用Python循环调用
random.gauss要快得多:

import numpy as np

N = 100
x = np.random.uniform(0., 1., size=N)
x_sigma = np.random.uniform(0., 0.2, size=N)

z = np.random.normal(0, 1, size=N)
x_gauss = x + z*x_sigma

print x-x_gauss

哦,我明白了,所以我应该在
for
循环中递归地执行此操作,以便为每个浮点获得不同的随机洗牌,或者有更好的方法来实现此操作吗?没关系,我将结束此操作,提出一个新的问题,以避免混淆。谢谢@unutbu!好吧,既然你写了那么好的代码来替换我的错误代码,那么就没有必要再提出另一个问题了。再次非常感谢!
import numpy as np

N = 100
x = np.random.uniform(0., 1., size=N)
x_sigma = np.random.uniform(0., 0.2, size=N)

z = np.random.normal(0, 1, size=N)
x_gauss = x + z*x_sigma

print x-x_gauss