在python中创建正态分布

时间:2015-11-06 19:23:53

标签: python iteration normal-distribution

我尝试在python中创建一个正态分布。我做了以下代码:

    prior = []
    variance = 20
    mean = 0.5
    x = -100

    while x <= 100:
            normal_distribution = 1/np.sqrt(1*np.pi*variance*variance)*np.exp(np.power(x-mean,2)/(2*variance*variance))
            prior.extend(normal_distribution)
            ++x

但是我遇到了类型错误:

TypeError: 'numpy.float64' object is not iterable

我试过了normal_distribution = ...在while循环之外有一个值。 我不完全理解它为什么不能迭代。

3 个答案:

答案 0 :(得分:3)

有三个问题:

  1. 您正在寻找.append,而不是.extend;这是错误的来源,因为.extend需要可迭代对象作为参数,因此它可以将每个元素附加到列表中。您正在添加单个元素 - 这是.append用于
  2. 的内容
  3. 您的pdf等式无效,您应该

    • 2而不是平方根
    • 下的1
    • exp
    • 内的否定
    • 您的variance变量用于std
    • 的含义

    1/np.sqrt(2*np.pi*variance)*np.exp(-(x-mean)**2/(2*variance))

  4. python中没有++x这样的东西,使用x += 1

答案 1 :(得分:0)

  

TypeError:&#39; numpy.float64&#39;对象不可迭代

据我所知,normal_distribution是标量值,因此它是prior.append(normal_distribution),而不是prior.extend(normal_distribution)

顺便说一句 - 在循环中追加并不是性能友好的,更不用说惯用语了。

最好使用generator expression之类的

previous = [(f(x)for x in range(-100,101)]

其中f是您用来生成数据的函数或lambda

答案 2 :(得分:0)

你不想extend。如果您去查看extend的文档,您就会找到

class list(object)  
def extend(self, t) Inferred type: (self: list[T], t: Iterable[T]) -> None   L.extend(iterable) -- extend list by appending elements from the utterable

所以你现在可以看到你的代码失败的原因。它确实试图迭代你传递给extend的对象,正如你正确地指出的那样,它不能。所以,热潮!

你想要的是append

class list(object)  

def append(self, x) Inferred type: (self: list[T], x: T) -> None   L.append(object) -- append object to end

更改此项将引导您进入调试过程的下一个令人兴奋的部分,确定您的循环无限的原因:)祝你好运