具有numpy.array输入的函数的部分导数

时间:2014-10-02 06:53:34

标签: python arrays numpy derivative

我的功能如下:

def fun(A, B, C):
    return numpy.sum(numpy.dot(A, B)) + numpy.sum(C)

其中A,B,C为二维numpy.array,返回值为float

如何针对fun(A,B,C)AB获取c的偏导数?  (并且偏导数也将是numpy.array

我已准备好使用numpyscipy这样的库,但不能使用符号库。

1 个答案:

答案 0 :(得分:1)

对于数字差异,您可以使用numdifftools

import numpy as np
import numdifftools

def fun(A, B, C):
    return numpy.sum(numpy.dot(A, B)) + numpy.sum(C)

def fun_A(A, B, C):
    J = numdifftools.Jacobian(lambda z: fun(z.reshape(A.shape), B, C).ravel())
    return J(A.ravel()).reshape(A.shape)


np.random.seed(1234)
A = np.random.rand(30,30)
B = np.random.rand(30,30)
C = np.random.rand(30,30)
print fun_A(A,B,C)[3,5]
# -> 14.9081790839

# Verify result manually
Ap = A.copy()
Ap[3,5] += 1e-6
print (fun(Ap,B,C) - fun(A,B,C)) / 1e-6
# -> 14.908178855

您也可以使用后一种方法轻松烹饪您自己的幼稚数值差异例程,只需每次递增少量矩阵元素。