Fast numerical derivatives for analytic functions with arbitrary round-off error and error propagation.
Click here for full documentation.
Features
Robustly compute the generalised Jacobi matrix for an arbitrary real analytic mapping ℝⁿ → ℝⁱ¹ × … × ℝⁱⁿ
Derivative is either computed to specified accuracy (to save computing time) or until maximum precision of function is reached
Algorithm based on John D’Errico’s DERIVEST: works even with functions that have large round-off error
Up to 1000x faster than numdifftools at equivalent precision
Returns error estimates for derivatives
Supports arbitrary auxiliary function arguments
Perform statistical error propagation based on numerically computed jacobian
Lightweight package, only depends on numpy
Planned features
Compute the Hessian matrix numerically with the same algorithm
Further generalize the calculation to support function arguments with shape (N, K), in that case compute the Jacobi matrix for each of the K vectors of length N
Examples
from matplotlib import pyplot as plt
import numpy as np
from jacobi import jacobi
# function of one variable with auxiliary argument; returns a vector
def f(x):
return np.sin(x) / x
x = np.linspace(-10, 10, 200)
fx = f(x)
# f(x) is a simple vectorized function, jacobian is diagonal
fdx, fdxe = jacobi(f, x, diagonal=True)
# fdxe is uncertainty estimate for derivative
plt.plot(x, fx, color="k", label="$f(x) = sin(x) / x$")
plt.plot(x, fdx, label="$f'(x)$ computed with jacobi")
scale = 14
plt.fill_between(
x,
fdx - fdxe * 10**scale,
fdx + fdxe * 10**scale,
label=f"$f'(x)$ error estimate$\\times \\, 10^{{{scale}}}$",
facecolor="C0",
alpha=0.5,
)
plt.legend()
from jacobi import propagate
import numpy as np
from scipy.special import gamma
# arbitrarily complex function that calls compiled libraries, numba-jitted code, etc.
def fn(x):
r = np.empty(3)
r[0] = 1.5 * np.exp(-x[0] ** 2)
r[1] = gamma(x[1] ** 3.1)
r[2] = np.polyval([1, 2, 3], x[0])
return r # x and r have different lengths
# fn accepts a parameter vector x, which has an associated covariance matrix xcov
x = [1.0, 2.0]
xcov = [[1.1, 0.1], [0.1, 2.3]]
y, ycov = propagate(fn, x, xcov) # y=f(x) and ycov = J xcov J^T
Comparison to numdifftools
Speed
Jacobi makes better use of vectorized computation than numdifftools and converges rapidly if the derivative is trivial. This leads to a dramatic speedup in some cases.
Smaller run-time is better (and ratio > 1).
Precision
The machine precision is indicated by the dashed line. Jacobi is comparable in accuracy to numdifftools. The error estimate has the right order of magnitude but slightly underestimates the true deviation. This does not matter for most applications.
Metadata
Release files for jacobi 0.9.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| jacobi-0.9.2.tar.gz | 998.3 kB | Without provenance | Details for jacobi-0.9.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| jacobi-0.9.2-py3-none-any.whl | Python 3 | none | any | Details for jacobi-0.9.2-py3-none-any.whl |
Total release size: 1.0 MB
Release files / jacobi-0.9.2.tar.gz
| Download URL | jacobi-0.9.2.tar.gz |
|---|---|
| Size | 998.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c11f481663246ef1c2da915b9f9ab4ef229051fb14e0afc232d4668301320828
|
|
BLAKE2b-256 checksum How to use checksums |
6ae5d851f71f1d7fa52212364242f763d1ef15c314beaa2761b5d0f0c88e40a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / jacobi-0.9.2-py3-none-any.whl
| Download URL | jacobi-0.9.2-py3-none-any.whl |
|---|---|
| Size | 11.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7e57b2d9c62d47bce688ef4b3564adeb1def611cf5ed232ec39a6aa6083f7a8c
|
|
BLAKE2b-256 checksum How to use checksums |
b05c2d6a44da539db44820b1c053958bfc4ee011e33f4f110175bfc712520440
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Security for jacobi 0.9.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.