2 votes

Python : Gradient d'une fonction matricielle

Je veux calculer le gradient de la fonction suivante h(x) = 0,5 x.T * A * x + b.T + x.

Pour l'instant, j'ai défini A comme étant juste une matrice (2,2).

def function(x):
    return 0.5 * np.dot(np.dot(np.transpose(x), A), x) + np.dot(np.transpose(b), x)

donde

A = A = np.zeros((2, 2))
n = A.shape[0]
A[range(n), range(n)] = 1

une matrice (2,2) dont la diagonale principale est 1 et

b = np.ones(2) 

Pour un point donné x = (1,1) numpy.gradient retourne une liste vide.

x = np.ones(2)  
result = np.gradient(function(x))

Cependant, je ne devrais pas obtenir quelque chose comme : grad(f((1,1)) = (x1 + 1, x2 + 1) = (2, 2).

J'apprécie toute aide.

0voto

Jacques Kvam Points 1315

Il semble que vous vouliez effectuer une différenciation symbolique ou une différenciation automatique qui np.gradient ne le fait pas. sympy est un paquet pour les mathématiques symboliques et autograd est un paquet pour la différenciation automatique pour numpy. Par exemple, pour faire cela avec autograd :

import autograd.numpy as np
from autograd import grad

def function(x):
    return 0.5 * np.dot(np.dot(np.transpose(x), A), x) + np.dot(np.transpose(b), x)

A = A = np.zeros((2, 2))
n = A.shape[0]
A[range(n), range(n)] = 1
b = np.ones(2)
x = np.ones(2)
grad(function)(x)

Sorties :

array([2., 2.])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X