【问题标题】:Python: Gradient of matrix functionPython:矩阵函数的梯度
【发布时间】:2018-05-27 16:11:03
【问题描述】:

我想计算以下函数 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

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

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)。

感谢任何帮助。

【问题讨论】:

    标签: python numpy gradient


    【解决方案1】:

    您似乎想要执行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.])
    

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 2013-05-25
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      相关资源
      最近更新 更多