Как вычислить производную второго порядка по вектору в python (pytorch?) - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь написать код, который выполняет выборку идентификаторов метрополии, и у меня возникают проблемы с вычислением производной второго порядка функции по отношению к numpy ndarray. Код, который я написал до сих пор, показан ниже:

import numpy as np
from scipy.optimize import newton

w = np.array([4,5,3,6,2])
y = np.array([1,0,0,1,1])
lamb = np.array([0.001, 0.0045, 0.0072,0.0083, 0.0069)]
tau = np.array([0.0002, 0.00045, 0.000378, 0.00467, 0.00235])              

# define function f       
def f(gamma):
    
    return (-1) * (np.dot(y, np.dot(w, gamma)) - np.sum(np.log(np.exp(np.dot(w,gamma)) + 1)) - np.sum((np.subtract(gamma,lamb)) * (np.subtract(gamma,lamb)) / (2*tau*tau)))

# mode for the metropolized iid sampler
gamma_hat = newton(f, gamma, fprime=None, args=(), tol=1.48e-08, maxiter=50, fprime2=None)

# not sure how to calculate the variance for the same sampler

Что я хочу сделать:

Чтобы вычислить дисперсию для сэмплера, я хочу взять производную второго порядка от функция f по отношению к векторной переменной gamma, а затем вычислить значение второй производной после замены gamma = gamma_hat.

Могу я сделать это в python? При необходимости я готов использовать pytorch для вычисления значения производной второго порядка.

Спасибо,

...