在我正在阅读的paper中,它定义了一个新指标,并且作者声称比以前的指标有一些优势。他们通过一些综合数据验证了自己的主张,如下所示:
其指标的实现非常简单。但是,我不确定他们如何创建这种综合数据。
这看起来像高斯,x
只是在一定的时间间隔内,我尝试使用以下代码,但未获得与本文介绍的图表相似的任何东西。
import numpy as np
def generate_gaussian(size=1000, lb=-0.1, up=0.1):
data = np.random.randn(5000)
data = data[(data <= up) & (data >= lb)][:size]
return data
np.random.seed(1234)
base = generate_gaussian()
background_pos = base + 0.3
background_neg = base + 0.7
现在我想知道作者是否使用我不知道的某些特殊分布(高斯除外)来创建这些数据?
答案 0 :(得分:2)
Numpy具有numpy.random.normal
,可从正态(高斯)分布中抽取随机样本。
import numpy as np
import matplotlib.pyplot as plt
sigma = 0.05
s0 = np.random.normal(0.2, sigma, 5000)
s1 = np.random.normal(0.6, sigma, 5000)
plt.hist(s0, 300, density=True, color="b")
plt.hist(s1, 300, density=True, color="r")
plt.xlim(0, 1)
plt.show()
您可以更改mu
(平均值)和sigma
的值以更改分布
mu = 0.55
sigma = 0.1
dist = np.random.normal(mu, sigma, 5000)
答案 1 :(得分:1)
您已将数据截断为+/- 0.1。如果您在大约+/- 3的范围内看,则归一化的高斯分布只会“看起来是高斯”。
import numpy as np
def generate_gaussian(size=1000, lb=-3, up=3):
data = np.random.randn(5000)
data = data[(data <= up) & (data >= lb)][:size]
return data
np.random.seed(1234)
base = generate_gaussian()
background_pos = base + 5
background_neg = base + 15
答案 2 :(得分:1)
您可以使用scipy.stats.norm
(info)。
导入库
>>> from scipy.stats import norm
>>> from matplotlib import pyplot
情节
>>> pyplot.hist(norm.rvs(loc=1, scale=0.5, size=10000), bins=30, alpha=0.5, label='norm_1')
>>> pyplot.hist(norm.rvs(loc=5, scale=0.5, size=10000), bins=30, alpha=0.5, label='norm_2')
>>> pyplot.legend()
>>> pyplot.show()
说明:
正态分布由均值(loc
,分布中心)和标准分布(scale
,分布散布或宽度的度量)定义。 rvs
生成大小为size
的所需正态分布的随机样本。例如,下一个代码生成4个正态分布的随机元素(平均= 1,SD = 1)。
>>> norm.rvs(loc=1, scale=1, size=4)
array([ 0.52154255, 1.40873701, 1.55959291, -0.01730568])