diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2014-07-29 14:20:48 -0500 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2014-07-29 14:20:48 -0500 |
commit | c50a2da70b4a5b5d23636c454b04d8afa7642d36 (patch) | |
tree | 5b20569df66fbea8dd165868ee2314f9cc83c1a6 | |
parent | d61ee81e0220318ebe9404f0381c7fdfe189f647 (diff) | |
parent | 778af02eb7c1668e751f435cd2a4952a362a0433 (diff) | |
download | numpy-c50a2da70b4a5b5d23636c454b04d8afa7642d36.tar.gz |
Merge pull request #4917 from juliantaylor/zeros_like_string
BUG: fix string type inconsistency between zeros and zeros_like
-rw-r--r-- | doc/release/1.9.0-notes.rst | 5 | ||||
-rw-r--r-- | numpy/core/numeric.py | 4 | ||||
-rw-r--r-- | numpy/core/tests/test_multiarray.py | 34 |
3 files changed, 42 insertions, 1 deletions
diff --git a/doc/release/1.9.0-notes.rst b/doc/release/1.9.0-notes.rst index 89acd353e..e6bedcdf8 100644 --- a/doc/release/1.9.0-notes.rst +++ b/doc/release/1.9.0-notes.rst @@ -247,6 +247,11 @@ a problem cannot occur. This change was already applied to the 1.8.1 release. +``zeros_like`` for string dtypes now returns empty strings +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To match the `zeros` function `zeros_like` now returns an array initialized +with empty strings instead of an array filled with `'0'`. + New Features ============ diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index 12e690f1e..5d7407ce0 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -133,7 +133,9 @@ def zeros_like(a, dtype=None, order='K', subok=True): """ res = empty_like(a, dtype=dtype, order=order, subok=subok) - multiarray.copyto(res, 0, casting='unsafe') + # needed instead of a 0 to get same result as zeros for for string dtypes + z = zeros(1, dtype=res.dtype) + multiarray.copyto(res, z, casting='unsafe') return res def ones(shape, dtype=None, order='C'): diff --git a/numpy/core/tests/test_multiarray.py b/numpy/core/tests/test_multiarray.py index a2667b38a..70398ee84 100644 --- a/numpy/core/tests/test_multiarray.py +++ b/numpy/core/tests/test_multiarray.py @@ -552,6 +552,40 @@ class TestCreation(TestCase): d = zeros(10, dtype=[('k', object, 2)]) assert_array_equal(d['k'], 0) + def test_zeros_like_like_zeros(self): + # test zeros_like returns the same as zeros + for c in np.typecodes['All']: + if c == 'V': + continue + d = zeros((3,3), dtype=c) + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + # explicitly check some special cases + d = zeros((3,3), dtype='S5') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + d = zeros((3,3), dtype='U5') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + + d = zeros((3,3), dtype='<i4') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + d = zeros((3,3), dtype='>i4') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + + d = zeros((3,3), dtype='<M8[s]') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + d = zeros((3,3), dtype='>M8[s]') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + + d = zeros((3,3), dtype='f4,f4') + assert_array_equal(zeros_like(d), d) + assert_equal(zeros_like(d).dtype, d.dtype) + def test_sequence_non_homogenous(self): assert_equal(np.array([4, 2**80]).dtype, np.object) assert_equal(np.array([4, 2**80, 4]).dtype, np.object) |