在 python 中创建正态分布
Creating normal distribution in python
我尝试在 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 循环之外有一个值。
我不太明白为什么它不能迭代。
存在三个问题:
- 您要找的是
.append
,不是.extend
;这是错误的来源,因为 .extend
需要 iterable 对象作为参数,因此它可以将 每个元素 附加到名单。您正在添加单个元素 - 这就是 .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
TypeError: 'numpy.float64' object is not iterable
据我所知,normal_distribution
是标量值,因此它是 prior.append(normal_distribution)
,而不是 prior.extend(normal_distribution)
。
顺便说一句 - 在循环中追加对性能不友好,更不用说惯用语了。
最好用generator expression喜欢
prior = [(f(x) for x in range(-100, 101)]
其中 f
是您用来生成数据的函数或 lambda。
你不想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
更改此设置将带您进入调试过程的下一个激动人心的部分,确定您的循环无限的原因:)祝您好运
我尝试在 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 循环之外有一个值。 我不太明白为什么它不能迭代。
存在三个问题:
- 您要找的是
.append
,不是.extend
;这是错误的来源,因为.extend
需要 iterable 对象作为参数,因此它可以将 每个元素 附加到名单。您正在添加单个元素 - 这就是.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
TypeError: 'numpy.float64' object is not iterable
据我所知,normal_distribution
是标量值,因此它是 prior.append(normal_distribution)
,而不是 prior.extend(normal_distribution)
。
顺便说一句 - 在循环中追加对性能不友好,更不用说惯用语了。
最好用generator expression喜欢
prior = [(f(x) for x in range(-100, 101)]
其中 f
是您用来生成数据的函数或 lambda。
你不想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
更改此设置将带您进入调试过程的下一个激动人心的部分,确定您的循环无限的原因:)祝您好运