gpt4 book ai didi

python - 高斯随机分布的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:36 26 4
gpt4 key购买 nike

我正在运行一段代码,其目的是获取 float 列表/数组和相同长度的关联列表/数组作为“错误”,并根据高斯分布随机排列第一个列表。

这是代码的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 的结果是一个 float 列表,它总是正数或负数。这意味着 random.gauss 调用总是为 x 中的每个 float 分配一个更大的新值,或者为 x< 中的所有值分配一个更小的新值/

我希望 random.gauss 调用将 x 中的 float 围绕其值向右和向左移动,因为这是一个随机过程。

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

最佳答案

这是 definition of random.gauss :

def gauss(self, mu, sigma):
random = self.random
z = self.gauss_next
self.gauss_next = None
if z is None:
x2pi = random() * TWOPI
g2rad = _sqrt(-2.0 * _log(1.0 - random()))
z = _cos(x2pi) * g2rad
self.gauss_next = _sin(x2pi) * g2rad

return mu + z*sigma

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

的符号

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

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

关于python - 高斯随机分布的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com