diff options
author | Travis E. Oliphant <teoliphant@gmail.com> | 2012-10-09 22:29:53 -0700 |
---|---|---|
committer | Travis E. Oliphant <teoliphant@gmail.com> | 2012-10-09 22:29:53 -0700 |
commit | 87930c4c30f14226ae8ceb0340858fd9940d67ea (patch) | |
tree | d69e177930f0c22cdf5b81e4ba87aa42d9fb5d38 | |
parent | 96abba1a14db89b933f1a4514c48c3e25af019a1 (diff) | |
parent | c5e8990bd857fd0869e7437428e5bf0d491336a0 (diff) | |
download | numpy-87930c4c30f14226ae8ceb0340858fd9940d67ea.tar.gz |
Merge pull request #466 from seberg/issue465
BUG: Fill correct strides for ndmin in array creation
-rw-r--r-- | numpy/core/src/multiarray/multiarraymodule.c | 14 | ||||
-rw-r--r-- | numpy/core/tests/test_regression.py | 7 |
2 files changed, 18 insertions, 3 deletions
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c index a7b2ba425..6ad0eb211 100644 --- a/numpy/core/src/multiarray/multiarraymodule.c +++ b/numpy/core/src/multiarray/multiarraymodule.c @@ -1517,18 +1517,26 @@ PyArray_EquivTypenums(int typenum1, int typenum2) /*** END C-API FUNCTIONS **/ static PyObject * -_prepend_ones(PyArrayObject *arr, int nd, int ndmin) +_prepend_ones(PyArrayObject *arr, int nd, int ndmin, NPY_ORDER order) { npy_intp newdims[NPY_MAXDIMS]; npy_intp newstrides[NPY_MAXDIMS]; + npy_intp newstride; int i, k, num; PyArrayObject *ret; PyArray_Descr *dtype; + if (order == NPY_FORTRANORDER || PyArray_ISFORTRAN(arr) || PyArray_NDIM(arr) == 0) { + newstride = PyArray_DESCR(arr)->elsize; + } + else { + newstride = PyArray_STRIDES(arr)[0] * PyArray_DIMS(arr)[0]; + } + num = ndmin - nd; for (i = 0; i < num; i++) { newdims[i] = 1; - newstrides[i] = PyArray_DESCR(arr)->elsize; + newstrides[i] = newstride; } for (i = num; i < ndmin; i++) { k = i - num; @@ -1669,7 +1677,7 @@ _array_fromobject(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *kws) * create a new array from the same data with ones in the shape * steals a reference to ret */ - return _prepend_ones(ret, nd, ndmin); + return _prepend_ones(ret, nd, ndmin, order); clean_type: Py_XDECREF(type); diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index 3bc7204cd..8056c2cfc 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -458,6 +458,13 @@ class TestRegression(TestCase): assert_equal(np.array(x,dtype=np.float32,ndmin=2).ndim,2) assert_equal(np.array(x,dtype=np.float64,ndmin=2).ndim,2) + def test_ndmin_order(self, level=rlevel): + """Issue #465 and related checks""" + assert_(np.array([1,2], order='C', ndmin=3).flags.c_contiguous) + assert_(np.array([1,2], order='F', ndmin=3).flags.f_contiguous) + assert_(np.array(np.ones((2,2), order='F'), ndmin=3).flags.f_contiguous) + assert_(np.array(np.ones((2,2), order='C'), ndmin=3).flags.c_contiguous) + def test_mem_axis_minimization(self, level=rlevel): """Ticket #327""" data = np.arange(5) |