Python实现我自己的linspace例程用于绘图

时间:2015-09-13 04:28:52

标签: python matplotlib

我是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,但我不知道如何解决这个问题。任何帮助将不胜感激!

1 个答案:

答案 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]