diff --git a/numpy/core/src/multiarray/nditer_api.c b/numpy/core/src/multiarray/nditer_api.c index d5c99804864c..beb68da9e560 100644 --- a/numpy/core/src/multiarray/nditer_api.c +++ b/numpy/core/src/multiarray/nditer_api.c @@ -758,6 +758,14 @@ NpyIter_IsFirstVisit(NpyIter *iter, int iop) NpyIter_AxisData *axisdata; npy_intp sizeof_axisdata; + /* + * size 1 reduction iterators are not full initialized but each visit is + * always the first, gh-4134 + */ + if (NPY_UNLIKELY(NIT_ITERSIZE(iter) == 1)) { + return 1; + } + sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop); axisdata = NIT_AXISDATA(iter); diff --git a/numpy/core/tests/test_ufunc.py b/numpy/core/tests/test_ufunc.py index 7ad75c85cedd..6415b2a3f52d 100644 --- a/numpy/core/tests/test_ufunc.py +++ b/numpy/core/tests/test_ufunc.py @@ -588,6 +588,7 @@ def test_object_array_reduction(self): assert_equal(np.all(a), False) assert_equal(np.max(a), True) assert_equal(np.min(a), False) + assert_equal(np.array([[1]], dtype=object).sum(), 1) def test_object_scalar_multiply(self): # Tickets #2469 and #4482