diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/blasdot/_dotblas.c | 5 | ||||
-rw-r--r-- | numpy/core/defmatrix.py | 7 | ||||
-rw-r--r-- | numpy/core/src/arrayobject.c | 21 |
3 files changed, 20 insertions, 13 deletions
diff --git a/numpy/core/blasdot/_dotblas.c b/numpy/core/blasdot/_dotblas.c index 933b21137..e2619b6d7 100644 --- a/numpy/core/blasdot/_dotblas.c +++ b/numpy/core/blasdot/_dotblas.c @@ -176,6 +176,9 @@ _select_matrix_shape(PyArrayObject *array) } +/* This also makes sure that the data segment is aligned with + an itemsize address as well by returning one if not true. +*/ static int _bad_strides(PyArrayObject *ap) { @@ -183,6 +186,8 @@ _bad_strides(PyArrayObject *ap) register int i, N=PyArray_NDIM(ap); register intp *strides = PyArray_STRIDES(ap); + if (((intp)(ap->data) % itemsize) != 0) + return 1; for (i=0; i<N; i++) { if ((strides[i] < 0) || (strides[i] % itemsize) != 0) return 1; diff --git a/numpy/core/defmatrix.py b/numpy/core/defmatrix.py index ca7240757..c74100dda 100644 --- a/numpy/core/defmatrix.py +++ b/numpy/core/defmatrix.py @@ -223,6 +223,8 @@ class matrix(N.ndarray): return def __getitem__(self, index): + if isscalar(index): + return self.__array__()[index] self._getitem = True try: @@ -472,11 +474,6 @@ class matrix(N.ndarray): def ptp(self, axis=None, out=None): return N.ndarray.ptp(self, axis, out)._align(axis) - # Needed becase tolist method expects a[i] - # to have dimension a.ndim-1 - def tolist(self): - return self.__array__().tolist() - def getI(self): M,N = self.shape if M == N: diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index 09d52fafa..867b32b65 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -1972,14 +1972,19 @@ PyArray_ToList(PyArrayObject *self) sz = self->dimensions[0]; lp = PyList_New(sz); for(i = 0; i < sz; i++) { - v=(PyArrayObject *)array_big_item(self, i); - if (v->nd >= self->nd) { - PyErr_SetString(PyExc_RuntimeError, - "array_item not returning smaller-" \ - "dimensional array"); - Py_DECREF(v); - Py_DECREF(lp); - return NULL; + if (PyArray_CheckExact(self)) { + v=(PyArrayObject *)array_big_item(self, i); + } + else { + v = PySequence_GetItem((PyObject *)self, i); + if ((!PyArray_Check(v)) || (v->nd >= self->nd)) { + PyErr_SetString(PyExc_RuntimeError, + "array_item not returning smaller-" \ + "dimensional array"); + Py_DECREF(v); + Py_DECREF(lp); + return NULL; + } } PyList_SetItem(lp, i, PyArray_ToList(v)); Py_DECREF(v); |