Python:插入似然函数的值范围始终返回相同的值

时间:2017-02-10 21:30:39

标签: python loops numpy data-fitting

我正在编写一个计算似然函数的程序。我想要适合的参数是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.然后,我想计算1000的I值在0.0001和0.001之间的似然函数,并从该数据中提取似然函数的最大值。 / p>

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]。显然,这是不正确的。我如何处理这个问题有什么关系?可能是因为它只读取一次返回语句吗?

编辑:将np.arange更改为np.linspace。这会创建一个正确大小的数组,但是它完全充满了值-169.58003268336941。

1 个答案:

答案 0 :(得分:1)

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