生成具有随机均匀方向和高斯分布幅度的向量

Generating a vector with with a random uniform direction and a Gaussian-distributed magnitude

我想向我拥有的列表的每个 (x,y) 点添加 2D 高斯噪声。

这就是为什么我想创建一个在 [0, 2pi) 上具有随机均匀方向和具有 N(0, \sigma^2).

的高斯分布幅度的噪声向量

如何在 Python 中生成仅指定方向和大小的矢量?

您可以生成两个向量,一个用于幅度,另一个用于相位。然后你用两者来得到你想要的。

import numpy as np
import math

sigma_squred = 0.01  # Change to whatever value you want
num_elements = 10    # Size of the vector you want

magnitude = math.sqrt(sigma_squred) * np.random.randn(num_elements)
phase = 2 * np.pi * np.random.random_sample(num_elements)

# This will give you a vector with a Gaussian magnitude and a random phase between 0 and 2PI
noise = magnitude * np.exp(1j*phase)

我发现使用单个复数向量更容易,但由于您有单独的 x 和 y 值,您可以获得 noise_xnoise_y 向量

noise_x = noise.real
noise_y = noise.imag

注意:我假设您可以使用 numpy 库,这会使事情变得容易得多。如果不是这种情况,您将需要一个循环来生成每个元素。要生成单个幅度样本,您可以使用 random.gauss(0, sigma),而 2*math.pi*random.random() 可用于生成相位样本。然后你像以前一样做一个复数,从那里你可以得到实部和虚部。

好吧,这并不难做到

n = 100
sigma = 1.0

phi = 2.0 * np.pi * np.random.random(n)
r   = np.random.normal(loc=0.0, scale=sigma, size=n)

x   = r*np.cos(phi)
y   = r*np.sin(phi)