diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2018-10-09 19:22:01 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-09 19:22:01 -0500 |
commit | 072c90ea848c753b7e8b7c42d2e359f53dfd0085 (patch) | |
tree | 966494857f352d5fca6a5ee766633bf8bd652101 /numpy | |
parent | 8a560b91cf9304fded4abfd9ca0f579e72711a5c (diff) | |
parent | ec69d79693c1dbc98e35f7eafe67b8832fb969d1 (diff) | |
download | numpy-072c90ea848c753b7e8b7c42d2e359f53dfd0085.tar.gz |
Merge pull request #12089 from bashtage/permutation-in-place-bug
BUG: Fix in-place permutation
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/random/mtrand/mtrand.pyx | 4 | ||||
-rw-r--r-- | numpy/random/tests/test_regression.py | 22 |
2 files changed, 24 insertions, 2 deletions
diff --git a/numpy/random/mtrand/mtrand.pyx b/numpy/random/mtrand/mtrand.pyx index 5097ad88f..ab5f64336 100644 --- a/numpy/random/mtrand/mtrand.pyx +++ b/numpy/random/mtrand/mtrand.pyx @@ -4907,8 +4907,8 @@ cdef class RandomState: # shuffle has fast-path for 1-d if arr.ndim == 1: - # must return a copy - if arr is x: + # Return a copy if same memory + if np.may_share_memory(arr, x): arr = np.array(arr) self.shuffle(arr) return arr diff --git a/numpy/random/tests/test_regression.py b/numpy/random/tests/test_regression.py index 3b4b4ed40..ca9bbbc71 100644 --- a/numpy/random/tests/test_regression.py +++ b/numpy/random/tests/test_regression.py @@ -133,3 +133,25 @@ class TestRegression(object): # Force Garbage Collection - should not segfault. import gc gc.collect() + + def test_permutation_subclass(self): + class N(np.ndarray): + pass + + np.random.seed(1) + orig = np.arange(3).view(N) + perm = np.random.permutation(orig) + assert_array_equal(perm, np.array([0, 2, 1])) + assert_array_equal(orig, np.arange(3).view(N)) + + class M(object): + a = np.arange(5) + + def __array__(self): + return self.a + + np.random.seed(1) + m = M() + perm = np.random.permutation(m) + assert_array_equal(perm, np.array([2, 1, 4, 0, 3])) + assert_array_equal(m.__array__(), np.arange(5)) |