我正在编写一个程序来计算似然函数。我要适合的参数是I。这是我的功能:
#loglikelihood
def like_xe(I):
model=(0.1535*(Z/A)*((charge*c/v_array)**2))*(np.log((2*m_e*(gamma_array**2)*(v_array**2)*(w_array)/((I*1.6E-6)**2)))-(2*(v_array/c_speed)**2))
return np.sum(((-0.5*np.log(2*np.pi*xe_un))-((xe_sp-(model))/(2*xe_un**2))))
“数组”都是长度为50的所有数据数组。然后,我要计算0.0001和0.001之间的1000个I值的似然函数,然后从该数据中提取似然函数的最大值。
I_list=np.arange(1E-4,0.001,1000)
like_val=[0 for like in range(len(I_list))]
for like in range(len(I_list)):
like_val[like]=like_xe(I_list[like])
这仅返回[-169.58003268336941]。显然,这是不正确的。我如何解决此问题怎么办?是否可能因为它只读取一次return语句?
编辑:将np.arange更改为np.linspace。这将创建正确大小的数组,但是,它完全充满了值-169.58003268336941。
最佳答案
np.arange需要开始,停止和步进。在1e-4和0.0001之间的1000步进表示1值。
>> np.arange(1E-4,0.001,1000)
array([ 0.0001])
用np.linspace替换它,您应该得到更好的迭代:
>> np.linspace(1E-4,0.001,10)
array([ 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007,
0.0008, 0.0009, 0.001 ])
(为简便起见,设置为10而不是1000)
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html
关于python - Python:插入似然函数的值范围始终返回相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42168972/