【发布时间】:2015-11-21 03:37:10
【问题描述】:
我需要从白噪声过程中抽取样本,以便以数值方式实现特定的积分。
如何使用 Python(即 numpy、scipy 等)生成它?
【问题讨论】:
标签: python numpy scipy probability noise
我需要从白噪声过程中抽取样本,以便以数值方式实现特定的积分。
如何使用 Python(即 numpy、scipy 等)生成它?
【问题讨论】:
标签: python numpy scipy probability noise
使用numpy.random.normal 创建具有正态分布(高斯)的随机样本:
import numpy as np
import seaborn as sns
mu, sigma = 0, 1 # mean and standard deviation
s = np.random.normal(mu, sigma, size=1000) # 1000 samples with normal distribution
# seaborn histogram with Kernel Density Estimation
sns.distplot(s, bins=40, hist_kws={'edgecolor':'black'})
【讨论】:
简短的答案是numpy.random.random()。 Numpy site description
但由于我发现越来越多类似问题的答案写成numpy.random.normal,我怀疑需要稍微描述一下。如果我确实正确理解了维基百科(以及大学的一些课程),那么高斯和白噪声是两个不同的东西。白噪声具有均匀分布,而不是正态分布(高斯)。
import numpy.random as nprnd
import matplotlib.pyplot as plt
num_samples = 10000
num_bins = 200
samples = numpy.random.random(size=num_samples)
plt.hist(samples, num_bins)
plt.show()
这是我的第一个答案,所以如果你纠正我在这里可能犯的错误,我很乐意更新它。谢谢=)
【讨论】:
White noise has Uniform distribution, not Normal (Gaussian). 白噪声必须在频率上具有均匀分布,但它可以在时间上具有任何分布(例如正态)。
您可以通过numpy.random.normal function 实现此目的,它从高斯分布中抽取给定数量的样本。
import numpy
import matplotlib.pyplot as plt
mean = 0
std = 1
num_samples = 1000
samples = numpy.random.normal(mean, std, size=num_samples)
plt.plot(samples)
plt.show()
【讨论】:
numpy.random.standard_normal(size=num_samples)也可以在mean=0,std=1时使用