scipy.misc.derivative用于多参数函数

tch*_*rty 15 python numpy scipy derivative

使用SciPy函数计算相对于第一个参数的点的函数的偏导数是直截了当的scipy.misc.derivative.这是一个例子:

def foo(x, y):
  return(x**2 + y**3)

from scipy.misc import derivative
derivative(foo, 1, dx = 1e-6, args = (3, ))
Run Code Online (Sandbox Code Playgroud)

但是,如何foo针对第二个参数采用函数的导数呢?我能想到的一种方法是生成一个lambda函数来重新调整参数,但这很快就会变得很麻烦.

另外,有没有办法根据函数的部分或全部参数生成偏导数组?

alk*_*lko 14

我会写一个简单的包装器,类似的东西

def partial_derivative(func, var=0, point=[]):
    args = point[:]
    def wraps(x):
        args[var] = x
        return func(*args)
    return derivative(wraps, point[var], dx = 1e-6)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> partial_derivative(foo, 0, [3,1])
6.0000000008386678
>>> partial_derivative(foo, 1, [3,1])
2.9999999995311555
Run Code Online (Sandbox Code Playgroud)