Some useful extensions for NumPy
Project description
npx
NumPy is a large library used everywhere in scientific computing. That's why breaking backwards-compatibility comes at 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.
scipyx does the same for SciPy.
If you have a fix for a NumPy method that can't go upstream for some reason, feel free to PR here.
dot
import npx
import numpy as np
a = np.random.rand(3, 4, 5)
b = np.random.rand(5, 2, 2)
out = npx.dot(a, b)
# out.shape == (3, 4, 2, 2)
Forms the dot product between the last axis of a
and the first axis of b
.
(Not the second-last axis of b
as numpy.dot(a, b)
.)
np.solve
import npx
import numpy as np
A = np.random.rand(3, 3)
b = np.random.rand(3, 10, 4)
out = npx.solve(A, b)
# out.shape == (3, 10, 4)
Solves a linear equation system with a matrix of shape (n, n)
and an array of shape
(n, ...)
. The output has the same shape as the second argument.
sum_at
/add_at
npx.sum_at(a, idx, minlength=0)
npx.add_at(out, idx, a)
Returns an array with entries of a
summed up at indices idx
with a minimum length of
minlength
. idx
can have any shape as long as it's matching a
. The output shape is
(minlength,...)
.
The numpy equivalent numpy.add.at
is much
slower:
Relevant issue reports:
unique
import npx
a = [0.1, 0.15, 0.7]
a_unique = npx.unique(a, tol=2.0e-1)
assert all(a_unique == [0.1, 0.7])
npx's unique()
works just like NumPy's, except that it provides a parameter
tol
(default 0.0
) which allows the user to set a tolerance. The real line
is essentially partitioned into bins of size tol
and at most one
representative of each bin is returned.
unique_rows
import npx
import numpy as np
a = np.random.randint(0, 5, size=(100, 2))
npx.unique_rows(a, return_inverse=False, return_counts=False)
Returns the unique rows of the integer array a
. The numpy alternative np.unique(a, axis=0)
is slow.
Relevant issue reports:
isin_rows
import npx
import numpy as np
a = [[0, 1], [0, 2]]
b = np.random.randint(0, 5, size=(100, 2))
npx.isin_rows(a, b)
Returns a boolean array of length len(a)
specifying if the rows a[k]
appear in b
.
Similar to NumPy's own np.isin
which only works for scalars.
mean
import npx
a = [1.0, 2.0, 5.0]
npx.mean(a, p=3)
Returns the generalized mean of a
given list. Handles the cases +-np.inf
(max/min) and0
(geometric mean) correctly.
Also does well for large p
.
Relevant NumPy issues:
License
This software is published under the BSD-3-Clause license.
Project details
Release history Release notifications | RSS feed
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 npx-0.1.0.tar.gz
.
File metadata
- Download URL: npx-0.1.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3edec9508326b6724d7c176dbcba2098508788241b8a671aab583d0c72b2f05b |
|
MD5 | 9b1e79d29b2acae4215220402b83b1d8 |
|
BLAKE2b-256 | 091023e79a8c15ce2896b9cf65c2a63857557c82de19c948af291a35cc1f7f80 |
File details
Details for the file npx-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: npx-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.27.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e07deadbf43096d8e1ec63dcd51b34e8d638e8e7e4a95d465e143e5701a0308 |
|
MD5 | 2e4a43295898e694aad5749b852a6d3e |
|
BLAKE2b-256 | 4bc84d8f80bf78c38268274b29c45a1a99ade4ade02b4d8c444ddbcc5fbaf1dd |