summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Taylor <jtaylor.debian@googlemail.com>2014-09-02 23:26:56 +0200
committerJulian Taylor <jtaylor.debian@googlemail.com>2014-09-02 23:26:56 +0200
commitef101b864487f2e0dfe0901fa1e11a727f6ac5a2 (patch)
treee8ae0a4200561b835939254d1bb510c52438ad4c
parent36d947fe379e7534624328f7382e4e1175823170 (diff)
parentf880b1aa7583d7c3dfc111a8b79e7e7ba364baf2 (diff)
downloadnumpy-ef101b864487f2e0dfe0901fa1e11a727f6ac5a2.tar.gz
Merge pull request #5022 from seberg/structured-insert
BUG: Fix np.insert for inserting a single item into a structured array
-rw-r--r--numpy/lib/function_base.py4
-rw-r--r--numpy/lib/tests/test_function_base.py12
2 files changed, 14 insertions, 2 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index 257057666..3074a2f70 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -3763,7 +3763,9 @@ def insert(arr, obj, values, axis=None):
if (index < 0):
index += N
- values = array(values, copy=False, ndmin=arr.ndim)
+ # There are some object array corner cases here, but we cannot avoid
+ # that:
+ values = array(values, copy=False, ndmin=arr.ndim, dtype=arr.dtype)
if indices.ndim == 0:
# broadcasting is very different here, since a[:,0,:] = ... behaves
# very different from a[:,[0],:] = ...! This changes values so that
diff --git a/numpy/lib/tests/test_function_base.py b/numpy/lib/tests/test_function_base.py
index ee3000547..624b5f3eb 100644
--- a/numpy/lib/tests/test_function_base.py
+++ b/numpy/lib/tests/test_function_base.py
@@ -310,6 +310,16 @@ class TestInsert(TestCase):
np.insert([0, 1, 2], x, [3, 4, 5])
assert_equal(x, np.array([1, 1, 1]))
+ def test_structured_array(self):
+ a = np.array([(1, 'a'), (2, 'b'), (3, 'c')],
+ dtype=[('foo', 'i'), ('bar', 'a1')])
+ val = (4, 'd')
+ b = np.insert(a, 0, val)
+ assert_array_equal(b[0], np.array(val, dtype=b.dtype))
+ val = [(4, 'd')] * 2
+ b = np.insert(a, [0, 2], val)
+ assert_array_equal(b[[0, 3]], np.array(val, dtype=b.dtype))
+
class TestAmax(TestCase):
def test_basic(self):
@@ -1465,7 +1475,7 @@ class TestMeshgrid(TestCase):
# Test that meshgrid complains about invalid arguments
# Regression test for issue #4755:
# https://github.com/numpy/numpy/issues/4755
- assert_raises(TypeError, meshgrid,
+ assert_raises(TypeError, meshgrid,
[1, 2, 3], [4, 5, 6, 7], indices='ij')