How to combine sympy derivatives with numpy array expressions?

I hope I can make my question clear.

I use scipy.optimize.minimizeto find maximum likelihood estimates for some experimental data. The data is 2d (NxN), so in my notes, the log-likelihood function (the function I need to maximize) looks like this:

formula

So formulais a 2d array, which depends on my specific model, and n ijis the measured 2d data. In the code, I wrote the same function as follows:

def logll(params, *args):

    A, x0, y0, bkg = params
    pico, F = args

    x, y = np.arange(pico.shape[0]), np.arange(pico.shape[1])

    erfi = erf((x + 1 - x0) / F) - erf((x - x0) / F)
    erfj = erf((y + 1 - y0) / F) - erf((y - y0) / F)

    lambda_p = A * F**2 * np.pi * erfi[:, np.newaxis] * erfj / 4 + bkg

    return - np.sum(pico * np.log(lambda_p) - lambda_p)

, 2d, erfi * erfj bkg NxN. , , , , , erfi erfj 1d- erfi[:, np.newaxis] * erfj .

, ,

minimize(logll, x0=[A, x0, y0, bkg], args=(peak, F), method='Powell')

, , , Newton-CG, . , , logll 4 . , sympy. [:, np.newaxis] , , .

ll_jac - 1d-, logll . A, x0, y0, bkg, x y sympy, :

logll.diff(A)
logll.diff(x0)
logll.diff(y0)
logll.diff(bkg)

hessian ll_hess - 2d-, logll , ,

logll.diff(A, A)
logll.diff(A, x0)

.. , - , [:, np.newaxis] logll sympy.

, , jacobian hessian ,

minimize(logll, x0=[A, x0, y0, bkg], args=(peak, F), 
         method='Newton-CG', jac=ll_jac, hess=ll_hess)

:

File "/usr/lib/python2.7/site-packages/scipy/optimize/_minimize.py", line 351, in minimize
**options)

File "/usr/lib/python2.7/site-packages/scipy/optimize/optimize.py", line 1365, in _minimize_newtoncg
update = alphak * pk

TypeError: unsupported operand type(s) for *: 'NoneType' and 'float'

, , , erfi erfj 1d-, bkg - 2d-.

, : , numpy sympy ? erfi * erfj 2d-, ?

+3

All Articles