我正在编写一个程序来计算似然函数。我要适合的参数是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/

10-12 18:06