试图整合正态分布
import numpy as np
import scipy这不起作用,引发类型错误:
def f_np(x):
return np.random.normal(size=x)
integrate.quad(f_manual, -np.inf, np.inf)
mtrand.pyx in numpy.random.mtrand.RandomState.normal()
_common.pyx in numpy.random._common.cont()
TypeError: 'float' object cannot be interpreted as an integer但如果我手动输入pdf:
def f_manual(x):
return 1/(1 * np.sqrt(2 * np.pi)) * np.exp(-(x - 0)**2 / (2 * 1**2) )
integrate.quad(f_manual, -np.inf, np.inf)
(0.9999999999999997, 1.017819145094224e-08)知道为什么吗?
发布于 2021-03-06 04:45:03
这里发生了几件事。
np.random.normal从正态分布中提取样本。size参数指定所需的样本数。如果指定10,就会得到一个包含10个样本的数组。如果指定一个元组(如(4, 5) ),您将得到一个4x5数组。另外,np.inf是一个浮点数,而np.random.normal需要一个整数或整数元组作为大小参数。
您在f_manual中拥有的是一个确定性函数(即PDF),它以x值返回PDF的值。
这是两件不同的事情。
scipy有一个函数来返回高斯:scipy.stats.norm.pdf的PDF。
import scipy.stats
scipy.integrate.quad(scipy.stats.norm.pdf, -np.inf, np.inf)
# (0.9999999999999998, 1.0178191320905743e-08)scipy还有一个CDF函数,它将从-inf到x的积分返回:
scipy.stats.norm.cdf(np.inf)
# 1.0
scipy.stats.norm.cdf(0)
# 0.5https://stackoverflow.com/questions/66502401
复制相似问题