diff options
author | jaimefrio <jaime.frio@gmail.com> | 2014-06-06 16:57:14 -0700 |
---|---|---|
committer | jaimefrio <jaime.frio@gmail.com> | 2014-06-06 16:57:39 -0700 |
commit | 44529602509f7af4d103ce968248eafbd51af5be (patch) | |
tree | 47a333ddab725ab57d9c3e449efc14b0eb3e3270 | |
parent | 4c854c2633894387988b43306ff72333cb00613a (diff) | |
download | numpy-44529602509f7af4d103ce968248eafbd51af5be.tar.gz |
BUG: Correct behavior for lists of tuples in unique, closes #4785
np.unique produces wrong results when passed a list of tuples and
no keyword arguments, as it fails to recognize it as a multidim
array, but handles it as a 1D array of objects. The only way around
this seems to be to completely eliminate the fast path for non-array
inputs using `set`.
-rw-r--r-- | numpy/lib/arraysetops.py | 8 | ||||
-rw-r--r-- | numpy/lib/tests/test_arraysetops.py | 10 |
2 files changed, 11 insertions, 7 deletions
diff --git a/numpy/lib/arraysetops.py b/numpy/lib/arraysetops.py index 0755fffd1..005703d16 100644 --- a/numpy/lib/arraysetops.py +++ b/numpy/lib/arraysetops.py @@ -167,13 +167,7 @@ def unique(ar, return_index=False, return_inverse=False, return_counts=False): array([1, 2, 6, 4, 2, 3, 2]) """ - try: - ar = ar.flatten() - except AttributeError: - if not return_inverse and not return_index and not return_counts: - return np.sort(list((set(ar)))) - else: - ar = np.asanyarray(ar).flatten() + ar = np.asanyarray(ar).flatten() optional_indices = return_index or return_inverse optional_returns = optional_indices or return_counts diff --git a/numpy/lib/tests/test_arraysetops.py b/numpy/lib/tests/test_arraysetops.py index 41d77c07f..271943abc 100644 --- a/numpy/lib/tests/test_arraysetops.py +++ b/numpy/lib/tests/test_arraysetops.py @@ -97,6 +97,16 @@ class TestSetOps(TestCase): aa = [1.+0.j, 1- 1.j, 1] assert_array_equal(np.unique(aa), [ 1.-1.j, 1.+0.j]) + # test for ticket #4785 + a = [(1, 2), (1, 2), (2, 3)] + unq = [1, 2, 3] + inv = [0, 1, 0, 1, 1, 2] + a1 = unique(a) + assert_array_equal(a1, unq) + a2, a2_inv = unique(a, return_inverse=True) + assert_array_equal(a2, unq) + assert_array_equal(a2_inv, inv) + def test_intersect1d(self): # unique inputs a = np.array([5, 7, 1, 2]) |