summaryrefslogtreecommitdiff
path: root/numpy/core/src/multiarraymodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/src/multiarraymodule.c')
-rw-r--r--numpy/core/src/multiarraymodule.c17
1 files changed, 14 insertions, 3 deletions
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)