我正在尝试编写python代码,该代码将为多个相同的高斯函数创建图。在在线图形计算器中,它看起来像这样:
但是当尝试使用numpy
和matplotlib
进行操作时,我得到以下信息:
我在做什么错?这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
b = 10 ** 6
L = 50
N = 5
sigma = np.power(10, 3)
x = np.linspace(0, L, 1000)
def gaussian(x, dk, sigma):
return np.exp(-np.power((x - dk) / sigma, 2.) / 2.)
y = 6 * gaussian(np.linspace(0, L, 1000), L / 4., np.power(10., -2.)) + 6 * gaussian(np.linspace(0, L, 1000), L / 2., np.power(10., -2.)) + 6 * gaussian(np.linspace(0, L, 1000), .75 * L, np.power(10., -2.))
plt.plot(x, y)
plt.show()
答案 0 :(得分:0)
您观察到的是采样伪像。
让我们介绍一个名为n_sample
的参数。此参数为我们提供在给定间隔内评估功能的点数。
import numpy as np
import matplotlib.pyplot as plt
def gaussian(x,dk,sigma):
return np.exp(-np.power((x-dk)/sigma,2.) / 2.)
L=50
n_sample=10000
x = np.linspace(0,L,n_sample)
y = 6*gaussian(np.linspace(0,L,n_sample),L/4., np.power(10.,-2.)) + 6*gaussian(np.linspace(0,L,n_sample), L/2., np.power(10.,-2.)) + 6*gaussian(np.linspace(0,L,n_sample), .75*L, np.power(10.,-2.))
plt.plot(x,y)
plt.title("n_sample={}".format(n_sample))
plt.show()
我为n_sample
用不同的值绘制了函数。
您会看到,如果将n_sample
增加到足够大的值,则可以正确表示数据。
答案 1 :(得分:0)
您在高斯函数中有错别字,这与您提到的样本不同。但是不必说“错”,因为它只会影响标准偏差值。
应该代替np.exp(-np.power((x-dk)/sigma,2.) / 2.)
np.exp(-np.power((x-dk),2.) /( sigma / 2.))
编辑:和sigma应该为10 ^ -3才能复制提供的示例。但是现在我只使用10 ^ -2,因为小的偏差会使事情变得过于敏感。
Sigma非常小,以至于高斯函数对采样大小非常敏感。
但是解决此问题将无法获得理想的结果,您会注意到低于1000时,中间的条形仍然更低。
为什么?
首先,您需要注意:
高斯函数并非主要用于生成阶跃函数。
让我们看一下有关采样的更详细的示例,它与统计信息有些关系。
N = 100
for i in range(50):
y += 6*gaussian(x, i, np.power(10.,-3.))
该图会发生什么?为什么中间会掉线?
原因是高斯函数是概率的近似值。可以说人类被新的流感消灭了。幸好只有100人能够幸存,现在我们选择50人,并检查有多少人被感染(其中1人受到感染)。
那么,从50个人中选择50个人的概率是多少?我们如何确定告诉某人某组有人受到拐弯呢?
回答:1,请确保您选择了全部50个其中的一部分必须曲折
那么,从50个人中选择25个人的概率是多少?我们如何确定告诉某人某组有人受到拐弯呢?
回答:1 / nCr(50,25)〜= 0
顺便说一下,这次高斯函数对于低采样量并不是一个很好的近似。 (由于中心极限定理wiki)
N = 10000
我减少了一些采样点以节省时间,所以
for i in range(0, 10000, 100):
y += 6*gaussian(x, i, np.power(10.,-3.))
是一样的,要从几万中选择几千,仍然很难区分。
对于100个样本,多选一个人进行计数的概率差异非常明显。
50人中有49人与50人中有48人有很大的不同,因为泳池总数只有100人。
但是对于10000,在50人中有49人,在50人中有48人在乎?它们几乎与那个巨大的池相同。这就是为什么您可以制作三个具有相同高度的条形物。
P.S。我所说的基本上是中心极限定理的思想,为什么当池很大时,抽样量与说真实值不会有很大的不同,这就是为什么我们可以进行“抽样”来表示整个池。