Python:矩阵函数的渐变

时间:2018-05-27 16:11:03

标签: python numpy gradient

我想计算以下函数的梯度h(x)= 0.5 x.T * A * x + b.T + x。

现在我将A设置为(2,2)矩阵。

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

a(2,2)矩阵,主对角线为1和

b = np.ones(2) 

对于给定的点x =(1,1),numpy.gradient返回一个空列表。

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

但不应该得到类似的东西:grad(f((1,1))=(x1 + 1,x2 + 1)=(2,2)。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您似乎希望执行np.gradient不执行的符号区分或自动区分。 sympy是用于符号数学的包,autograd是用于自动区分numpy的包。例如,要使用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)

输出:

array([2., 2.])