numdifftools
numdifftools copied to clipboard
Higher-order multivariate derivative
Assume f is a function that consumes numpy arrays of shape N x d and returns arrays of the form N (i.e., it is a map from R^d to R and allows for vectorized calls).
What is the most elegant way to compute $\partial^{n_0}{0}\dots\partial^{n_d}{d}f$ using numdifftools, if possible in a vectorized fashion as well?
Currently there is no easy way to calculate the general multivariate partial derivative like this
with numdifftools. However, for n=1 and n=2 you can easily calculate partial derivatives
using the numdifftools wrappers Jacobian, Hessdiag and Hessian.
An easy fix to get high order partial derivatives from numdifftools is to modify the Jacobian by removing the restriction that n must be one. Then you can get reasonable reliable partial derivaties
up to n equal about 10 depending on the function you are differentiating.
This would be a very useful enhancement.
Looking at some bits of sklearn, there is the idea of a power used to specify terms in a multivariate polynomial
For example. (2,1,0) means x[0]^2 * x[1]^1 * x[2]^0 = x[0]^2 * x[1].
See PolynomialFeatures from sklearn.preprocessing
Passing in powers in this way could be used to specify that you want d^3X/dx^2dy for example