scipy.misc.derivative for multiple argument function

17,821

Solution 1

I would write a simple wrapper, something along the lines of

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)

Demo:

>>> partial_derivative(foo, 0, [3,1])
6.0000000008386678
>>> partial_derivative(foo, 1, [3,1])
2.9999999995311555

Solution 2

Yes, it is implemented in sympy. Demo:

>>> from sympy import symbols, diff
>>> x, y = symbols('x y', real=True)
>>> diff( x**2 + y**3, y)
3*y**2
>>> diff( x**2 + y**3, y).subs({x:3, y:1})
3
Share:
17,821

Related videos on Youtube

tchakravarty
Author by

tchakravarty

Statistician.

Updated on December 05, 2020

Comments

  • tchakravarty
    tchakravarty over 3 years

    It is straightforward to compute the partial derivatives of a function at a point with respect to the first argument using the SciPy function scipy.misc.derivative. Here is an example:

    def foo(x, y):
      return(x**2 + y**3)
    
    from scipy.misc import derivative
    derivative(foo, 1, dx = 1e-6, args = (3, ))
    

    But how would I go about taking the derivative of the function foo with respect to the second argument? One way I can think of is to generate a lambda function that rejigs the arguments around, but that can quickly get cumbersome.

    Also, is there a way to generate an array of partial derivatives with respect to some or all of the arguments of a function?

    • laszlopanaflex
      laszlopanaflex over 5 years
      what is the role of the args in the derivative() function?
  • tchakravarty
    tchakravarty over 10 years
    That's nice, and I can put them together as a vector of partial derivatives, but would have thought that between SciPy and SymPy, one of them would implement this. What I was looking for is the functionality provided by the R deriv function.
  • alko
    alko over 10 years
    @fgnu not well acquinted with R, can you link to docs for deriv
  • tchakravarty
    tchakravarty over 10 years
    Here you go. To quote the manual "It returns a call for computing the expr and its (partial) derivatives, simultaneously."