我尝试在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循环之外有一个值。 我不完全理解它为什么不能迭代。
答案 0 :(得分:3)
有三个问题:
.append
,而不是.extend
;这是错误的来源,因为.extend
需要可迭代对象作为参数,因此它可以将每个元素附加到列表中。您正在添加单个元素 - 这是.append
用于您的pdf等式无效,您应该
2
而不是平方根1
exp
variance
变量用于std
1/np.sqrt(2*np.pi*variance)*np.exp(-(x-mean)**2/(2*variance))
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
更改此项将引导您进入调试过程的下一个令人兴奋的部分,确定您的循环无限的原因:)祝你好运