我是python的新手,并且无法使用我的linspace例程制作高斯函数图。 (我不想使用numpy)。
"""plot a normalized gaussian function
"""
from matplotlib import pyplot as mp
import math
def linspace(a,b,n):
if n==1:
yield b
return
d=(b-a)/(n-1)
for i in range(n):
yield a+d*i
def gaussian(x,xo, sig):
return ((2*math.pi*sig**(2.))**(-1/2.))*(math.exp(((x-xo)**(2.))/(2*sig**(2.))))
for xo, sig in [(-1,0.5), (-1,1), (-1,2)]:
mp.plot(gaussian(linspace(-3,3,1000),xo,sig))
mp.show()
错误是我不能以高斯的方式使用这个linspace,但我不知道如何解决这个问题。任何帮助将不胜感激!
答案 0 :(得分:0)
在执行除法计算d
时,您需要使用浮点数。
例如:
(3- (-3))/(1000-1)=0
(3.-(-3.))/(1000.-1.)=0.006
所以,在你的函数中,你可以:
def linspace(a,b,n):
if n==1:
yield b
return
d=float(b-a)/float(n-1)
for i in range(n):
yield a+d*i
如果没有强制转换为float,则linspace的前10个值将返回为:
[-3, -3, -3, -3, -3, -3, -3, -3, -3, -3]
但是,如果您使用上述功能:
[-3.0, -2.993993993993994, -2.987987987987988, -2.981981981981982, -2.975975975975976, -2.96996996996997, -2.963963963963964, -2.957957957957958, -2.951951951951952, -2.945945945945946]