我想计算以下函数的梯度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)。
感谢任何帮助。
答案 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.])