17

SciPy function を使用して、最初の引数に関する点での関数の偏導関数を計算するのは簡単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, ))

fooしかし、2 番目の引数に関して関数の導関数を取得するにはどうすればよいでしょうか? 私が考えることができる 1 つの方法は、引数を再調整するラムダ関数を生成することですが、すぐに面倒になる可能性があります。

また、関数の引数の一部またはすべてに関して偏導関数の配列を生成する方法はありますか?

4

3 に答える 3

21

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
于 2013-12-20T17:05:30.657 に答える