diff options
Diffstat (limited to 'numpy/core')
-rw-r--r-- | numpy/core/src/arraymethods.c | 7 | ||||
-rw-r--r-- | numpy/core/src/arrayobject.c | 3 | ||||
-rw-r--r-- | numpy/core/src/multiarraymodule.c | 17 |
3 files changed, 16 insertions, 11 deletions
diff --git a/numpy/core/src/arraymethods.c b/numpy/core/src/arraymethods.c index 2d4c82054..a118787c7 100644 --- a/numpy/core/src/arraymethods.c +++ b/numpy/core/src/arraymethods.c @@ -103,14 +103,7 @@ array_reshape(PyArrayObject *self, PyObject *args, PyObject *kwds) goto fail; } } - - if (newshape.len == 1) { - PyDimMem_FREE(newshape.ptr); - return PyArray_Ravel(self, 0); - } - ret = PyArray_Newshape(self, &newshape, order); - PyDimMem_FREE(newshape.ptr); return ret; diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index 084eaaf7a..55254b5e9 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -3502,7 +3502,8 @@ _check_axis(PyArrayObject *arr, int *axis, int flags) if ((*axis >= MAX_DIMS) || (n==0)) { temp = PyArray_Ravel(arr,0); - *axis = PyArray_NDIM(temp)-1; + if (temp) *axis = PyArray_NDIM(temp)-1; + else *axis = 0; return temp; } else { diff --git a/numpy/core/src/multiarraymodule.c b/numpy/core/src/multiarraymodule.c index 5ccd67cf5..10231474f 100644 --- a/numpy/core/src/multiarraymodule.c +++ b/numpy/core/src/multiarraymodule.c @@ -181,8 +181,18 @@ PyArray_Ravel(PyArrayObject *a, PyArray_ORDER fortran) PyArray_Dims newdim = {NULL,1}; intp val[1] = {-1}; - newdim.ptr = val; - return PyArray_Newshape(a, &newdim, fortran); + if (fortran == PyArray_ANYORDER) + fortran = PyArray_ISFORTRAN(a); + + newdim.ptr = val; + if (!fortran && PyArray_ISCONTIGUOUS(a)) { + return PyArray_Newshape(a, &newdim, PyArray_CORDER); + } + else if (fortran && PyArray_ISFORTRAN(a)) { + return PyArray_Newshape(a, &newdim, PyArray_FORTRANORDER); + } + else + return PyArray_Flatten(a, fortran); } static double @@ -480,7 +490,8 @@ PyArray_Newshape(PyArrayObject *self, PyArray_Dims *newdims, (!PyArray_ISCONTIGUOUS(self) || (fortran == PyArray_FORTRANORDER)) && (!PyArray_ISFORTRAN(self) || (fortran == PyArray_CORDER))) { PyErr_SetString(PyExc_ValueError, - "cannot return a view from reshape."); + "array cannot be reshaped as a view; get a "\ + "copy first."); return NULL; } if (_fix_unknown_dimension(newdims, PyArray_SIZE(self)) < 0) |