diff options
author | Travis Oliphant <oliphant@enthought.com> | 2005-10-20 07:07:53 +0000 |
---|---|---|
committer | Travis Oliphant <oliphant@enthought.com> | 2005-10-20 07:07:53 +0000 |
commit | 8bc53bd09afa8be668fcd50f67542f2e21ce2d65 (patch) | |
tree | b721f7234c5780bcc26d135f6e60143a77f75f13 /scipy/base/src | |
parent | 143fa8c512e15c72c12301c05f263cb2e08b61b9 (diff) | |
download | numpy-8bc53bd09afa8be668fcd50f67542f2e21ce2d65.tar.gz |
Added .fill method.
Diffstat (limited to 'scipy/base/src')
-rw-r--r-- | scipy/base/src/arraymethods.c | 16 | ||||
-rw-r--r-- | scipy/base/src/arrayobject.c | 55 | ||||
-rw-r--r-- | scipy/base/src/scalartypes.inc.src | 9 |
3 files changed, 77 insertions, 3 deletions
diff --git a/scipy/base/src/arraymethods.c b/scipy/base/src/arraymethods.c index 977622089..be6422d49 100644 --- a/scipy/base/src/arraymethods.c +++ b/scipy/base/src/arraymethods.c @@ -19,6 +19,20 @@ array_take(PyArrayObject *self, PyObject *args, PyObject *kwds) return _ARET(PyArray_Take(self, indices, dimension)); } +static char doc_fill[] = "a.fill(value) places the scalar value at every"\ + "position in the array."; + +static PyObject * +array_fill(PyArrayObject *self, PyObject *args) +{ + PyObject *obj; + if (!PyArg_ParseTuple(args, "O", &obj)) + return NULL; + if (PyArray_FillWithScalar(self, obj) < 0) return NULL; + Py_INCREF(Py_None); + return Py_None; +} + static char doc_put[] = "a.put(indices, values) sets a.flat[n] = v[n] "\ "for each n in indices. v can be scalar or shorter than indices, "\ "will repeat."; @@ -1365,6 +1379,8 @@ static PyMethodDef array_methods[] = { {"dump", (PyCFunction) array_dump, 1, doc_dump}, /* Extended methods added 2005 */ + {"fill", (PyCFunction)array_fill, + METH_VARARGS, doc_fill}, {"transpose", (PyCFunction)array_transpose, METH_VARARGS, doc_transpose}, {"take", (PyCFunction)array_take, diff --git a/scipy/base/src/arrayobject.c b/scipy/base/src/arrayobject.c index 8d9b207eb..1a07b2853 100644 --- a/scipy/base/src/arrayobject.c +++ b/scipy/base/src/arrayobject.c @@ -3399,6 +3399,7 @@ PyArray_Resize(PyArrayObject *self, PyArray_Dims *newshape) } +/* Assumes contiguous */ static void PyArray_FillObjectArray(PyArrayObject *arr, PyObject *obj) { @@ -3419,6 +3420,60 @@ PyArray_FillObjectArray(PyArrayObject *arr, PyObject *obj) } } +static int +PyArray_FillWithScalar(PyArrayObject *arr, PyObject *obj) +{ + PyObject *newarr; + int itemsize; + void *fromptr; + PyArray_Typecode type = {0,0,0}; + intp size; + + type.type_num = PyArray_TYPE(arr); + itemsize = PyArray_ITEMSIZE(arr); + type.itemsize = itemsize; + newarr = PyArray_FromAny(obj, &type, 0,0, BEHAVED_FLAGS_RO); + if (newarr == NULL) return -1; + fromptr = PyArray_DATA(newarr); + size=PyArray_SIZE(arr); + if (PyArray_ISONESEGMENT(arr)) { + char *toptr=PyArray_DATA(arr); + while(size--) { + memcpy(toptr, fromptr, itemsize); + toptr += itemsize; + } + } + else { + PyArrayIterObject *iter; + PyObject *behaved; + + behaved = PyArray_FromAny((PyObject *)arr, NULL, 0,0, + BEHAVED_FLAGS | UPDATEIFCOPY); + if (behaved == NULL) { + Py_DECREF(newarr); + return -1; + } + + iter = (PyArrayIterObject *) \ + PyArray_IterNew(behaved); + + if (iter == NULL) { + Py_DECREF(behaved); + Py_DECREF(newarr); + return -1; + } + + while(size--) { + memcpy(iter->dataptr, fromptr, itemsize); + PyArray_ITER_NEXT(iter); + } + + Py_DECREF(iter); + Py_DECREF(behaved); + } + Py_DECREF(newarr); + return 0; +} static PyObject * array_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) diff --git a/scipy/base/src/scalartypes.inc.src b/scipy/base/src/scalartypes.inc.src index f8742fed1..2119f42fc 100644 --- a/scipy/base/src/scalartypes.inc.src +++ b/scipy/base/src/scalartypes.inc.src @@ -861,7 +861,7 @@ gentype_wraparray(PyObject *scalar, PyObject *args) /**begin repeat -#name=tolist, toscalar, tostring, astype, copy, resize, __deepcopy__, choose, sort, argsort, searchsorted, argmax, argmin, reshape, view, swapaxes, max, min, ptp, conj, conjugate, nonzero, all, any, flatten, ravel# +#name=tolist, toscalar, tostring, astype, copy, resize, __deepcopy__, choose, sort, argsort, searchsorted, argmax, argmin, reshape, view, swapaxes, max, min, ptp, conj, conjugate, nonzero, all, any, flatten, ravel, fill, transpose# */ static PyObject * @@ -920,7 +920,7 @@ gentype_byteswap(PyObject *self, PyObject *args) /**begin repeat -#name=transpose, getfield, take, put, putmask, repeat, tofile, mean, trace, diagonal, clip, std, sum, cumsum, prod, cumprod, compress# +#name=getfield, take, put, putmask, repeat, tofile, mean, trace, diagonal, clip, std, sum, cumsum, prod, cumprod, compress# */ static PyObject * @@ -1038,8 +1038,10 @@ static PyMethodDef gentype_methods[] = { {"dump", (PyCFunction) gentype_dump, 1, NULL}, /* Methods for array */ + {"fill", (PyCFunction)gentype_fill, + METH_VARARGS, NULL}, {"transpose", (PyCFunction)gentype_transpose, - METH_VARARGS|METH_KEYWORDS, NULL}, + METH_VARARGS, NULL}, {"take", (PyCFunction)gentype_take, METH_VARARGS|METH_KEYWORDS, NULL}, {"put", (PyCFunction)gentype_put, @@ -1634,6 +1636,7 @@ PyArray_TypecodeFromTypeObject(PyObject *type, PyArray_Typecode *typecode) { itemsize = descr->elsize; } typecode->itemsize = itemsize; + typecode->fortran = 0; return; } |