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