summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2008-05-07 20:24:34 +0000
committerTravis Oliphant <oliphant@enthought.com>2008-05-07 20:24:34 +0000
commitc32a389417cd22a7fca720f2b1505acbe8560b3d (patch)
tree57ec5166c87bfdb9f4dc4567daf530c2682f842b /numpy
parent7c99e67bb87381a4622cde5e2d244a5f64882485 (diff)
downloadnumpy-c32a389417cd22a7fca720f2b1505acbe8560b3d.tar.gz
* Make matrices return 1-dimensional array on item selection for 1.2\n * Remove (now un-needed) tolist method from matrices\n * For ticket #551, copy data if start of memory is not aligned on itemsize location in optimized blas wrapper.
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/blasdot/_dotblas.c5
-rw-r--r--numpy/core/defmatrix.py7
-rw-r--r--numpy/core/src/arrayobject.c21
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);