summaryrefslogtreecommitdiff
path: root/numpy/lib/arraysetops.py
diff options
context:
space:
mode:
authorJason Thai <jasonnthaii@gmail.com>2022-05-27 01:50:40 -0700
committerJason Thai <jasonnthaii@gmail.com>2022-05-28 00:46:09 -0700
commit6a567fce2d3ef5aa1f325e7efae15b315537a06e (patch)
tree22682db49e44278caf47ee5c8fa724c55f1acbd2 /numpy/lib/arraysetops.py
parent172a27fae4829933c4a8a7393aa6d0e71f9cc609 (diff)
downloadnumpy-6a567fce2d3ef5aa1f325e7efae15b315537a06e.tar.gz
ENH: Added equal-nans kwarg to np.unique
Diffstat (limited to 'numpy/lib/arraysetops.py')
-rw-r--r--numpy/lib/arraysetops.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/numpy/lib/arraysetops.py b/numpy/lib/arraysetops.py
index d44e1a983..490ff6a87 100644
--- a/numpy/lib/arraysetops.py
+++ b/numpy/lib/arraysetops.py
@@ -131,13 +131,13 @@ def _unpack_tuple(x):
def _unique_dispatcher(ar, return_index=None, return_inverse=None,
- return_counts=None, axis=None):
+ return_counts=None, axis=None, *, equal_nans=None):
return (ar,)
@array_function_dispatch(_unique_dispatcher)
def unique(ar, return_index=False, return_inverse=False,
- return_counts=False, axis=None):
+ return_counts=False, axis=None, *, equal_nans=True):
"""
Find the unique elements of an array.
@@ -162,8 +162,10 @@ def unique(ar, return_index=False, return_inverse=False,
return_counts : bool, optional
If True, also return the number of times each unique item appears
in `ar`.
+ equals_nan : bool, optional
+ If True, collapses multiple NaN values in return array into 1
- .. versionadded:: 1.9.0
+ .. versionchanged: NumPy 1.24
axis : int or None, optional
The axis to operate on. If None, `ar` will be flattened. If an integer,
@@ -269,7 +271,8 @@ def unique(ar, return_index=False, return_inverse=False,
"""
ar = np.asanyarray(ar)
if axis is None:
- ret = _unique1d(ar, return_index, return_inverse, return_counts)
+ ret = _unique1d(ar, return_index, return_inverse, return_counts,
+ equal_nans)
return _unpack_tuple(ret)
# axis was specified and not None
@@ -312,13 +315,13 @@ def unique(ar, return_index=False, return_inverse=False,
return uniq
output = _unique1d(consolidated, return_index,
- return_inverse, return_counts)
+ return_inverse, return_counts, equal_nans)
output = (reshape_uniq(output[0]),) + output[1:]
return _unpack_tuple(output)
def _unique1d(ar, return_index=False, return_inverse=False,
- return_counts=False):
+ return_counts=False, equal_nans=True):
"""
Find the unique elements of an array, ignoring shape.
"""
@@ -334,7 +337,8 @@ def _unique1d(ar, return_index=False, return_inverse=False,
aux = ar
mask = np.empty(aux.shape, dtype=np.bool_)
mask[:1] = True
- if aux.shape[0] > 0 and aux.dtype.kind in "cfmM" and np.isnan(aux[-1]):
+ if (equal_nans and aux.shape[0] > 0 and aux.dtype.kind in "cfmM" and
+ np.isnan(aux[-1])):
if aux.dtype.kind == "c": # for complex all NaNs are considered equivalent
aux_firstnan = np.searchsorted(np.isnan(aux), True, side='left')
else: