SciPy fixes and extensions
Project description
scipyx
SciPy is large library used everywhere in scientific computing. That's why breaking backwards-compatibility comes as a significant cost and is almost always avoided, even if the API of some methods is arguably lacking. This package provides drop-in wrappers "fixing" those.
If you have a fix for a SciPy method that can't go upstream for some reason, feel free to PR here.
Krylov methods
import numpy as np
import scipy.sparse
import scipyx as spx
# create tridiagonal (-1, 2, -1) matrix
n = 100
data = -np.ones((3, n))
data[1] = 2.0
A = scipy.sparse.spdiags(data, [-1, 0, 1], n, n)
A = A.tocsr()
b = np.ones(n)
sol, info = spx.cg(A, b, tol=1.0e-10)
sol, info = spx.minres(A, b, tol=1.0e-10)
sol, info = spx.gmres(A, b, tol=1.0e-10)
sol, info = spx.bicg(A, b, tol=1.0e-10)
sol, info = spx.bicgstab(A, b, tol=1.0e-10)
sol, info = spx.cgs(A, b, tol=1.0e-10)
sol, info = spx.qmr(A, b, tol=1.0e-10)
sol
is the solution of the linear system A @ x = b
(or None
if no convergence),
and info
contains some useful data, e.g., info.resnorms
. The solution sol
and all
callback x
have the shape of x0
/b
.
The methods are wrappers around SciPy's iterative
solvers.
Relevant issues:
Optimization
import scipyx as spx
def f(x):
return (x ** 2 - 2) ** 2
x0 = 1.5
out = spx.minimize(f, x0)
print(out.x)
x0 = -3.2
x, _ = spx.leastsq(f, x0)
print(x)
In scipyx, all intermediate values x
and the result from a minimization out.x
will
have the same shape as x0
. (In SciPy, they always have shape (n,)
, no matter the
input vector.)
Relevant issues:
Root-finding
import scipyx as spx
def f(x):
return x ** 2 - 2
a, b = spx.bisect(f, 0.0, 5.0, tol=1.0e-12)
a, b = spx.regula_falsi(f, 0.0, 5.0, tol=1.0e-12)
scipyx provides some basic nonlinear root-findings algorithms: bisection and regula falsi. They're not as fast-converging as other methods, but are very robust and work with almost any function.
Rolling Lagrange interpolation
import numpy as np
import scipyx as spx
x = np.linspace(0.0, 1.0, 11)
y = np.sin(7.0 * x)
poly = spx.interp_rolling_lagrange(x, y, order=3)
Given an array of coordinates x
and an array of values y
, you can use scipyx to
compute a piecewise polynomial Lagrange approximation. The order + 1
closest
coordinates x/y are considered for each interval.
Order 0 | Order 1 | Order 2 |
Jacobi elliptic functions with complex argument
SciPy supports
Jacobi elliptic functions as
ellipj.
Unfortunately, only real-valued argument u
and parameter m
are allowed. scipyx
expands support to complex-valued argument u
.
import scipyx as spx
u = 1.0 + 2.0j
m = 0.8
# sn, cn, dn, ph = scipy.special.ellipj(x, m) # not working
sn, cn, dn, ph = spx.ellipj(u, m)
Relevant bug reports:
License
This software is published under the BSD-3-Clause license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file scipyx-0.0.17.tar.gz
.
File metadata
- Download URL: scipyx-0.0.17.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fcde21465a5e09b6e0603c72a13f6214ecc2b657520b906ca83659cf8fc7734d |
|
MD5 | 55946071b38156e541cadde26be2cf24 |
|
BLAKE2b-256 | 44e5065a0562673815f39d84edf208a945c9f30d56f373ded133d0a05cc1b0d6 |
File details
Details for the file scipyx-0.0.17-py3-none-any.whl
.
File metadata
- Download URL: scipyx-0.0.17-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7285299b0728cab0d770625cf7402c558254558108f435d8bd0847c7f29aa886 |
|
MD5 | 444951c5735ce378f3a59288f2904982 |
|
BLAKE2b-256 | 06ff8baee17e7b9161b440bc701ea6375dccf940a8b3c38ad5894ec543682289 |