diff options
author | Julian Taylor <jtaylor.debian@googlemail.com> | 2014-07-29 20:04:28 +0200 |
---|---|---|
committer | Julian Taylor <jtaylor.debian@googlemail.com> | 2014-07-29 20:21:57 +0200 |
commit | 778af02eb7c1668e751f435cd2a4952a362a0433 (patch) | |
tree | a195ec7efd70f97e81276c49fdeffdfc8a1ba666 /numpy | |
parent | c09d0ce0e11c94a83413c1bc6c9b2f5f40008a5a (diff) | |
download | numpy-778af02eb7c1668e751f435cd2a4952a362a0433.tar.gz |
BUG: fix string type inconsistency between zeros and zeros_like
np.zeros for strings returns empty strings while np.zeros_like of a
string array creates strings containing an string 0.
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/numeric.py | 4 | ||||
-rw-r--r-- | numpy/core/tests/test_multiarray.py | 34 |
2 files changed, 37 insertions, 1 deletions
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index a85e8514c..57784a51f 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -131,7 +131,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 9c51895fa..d02821cba 100644 --- a/numpy/core/tests/test_multiarray.py +++ b/numpy/core/tests/test_multiarray.py @@ -515,6 +515,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) |