[Numpy-discussion] order flag again
Travis Oliphant
oliphant at ee.byu.edu
Mon Mar 27 16:29:06 EST 2006
Charles R Harris wrote:
>
>
> On 3/27/06, *Fernando Perez* <Fernando.Perez at colorado.edu
> <mailto:Fernando.Perez at colorado.edu>> wrote:
>
> Charles R Harris wrote:
>
> > What purpose does ascontiguous serve?
>
> One I can think of: making sure that C code of the type
>
> double foo(double *array,long num_elements) { ... }
>
> can be called in C as
>
> foo((double *)numpy_arr->data,numpy_arr->dimensions[0]);
>
> (the dims name in C may be different, I'm not looking at code
> right now)
>
> and be OK with walking the given memory region as a contiguous
> chunk of
> doubles, num_elements of them.
>
> As long as foo() doesn't modify its input, this works fine and
> it's nice to
> have such guarantees: it makes writing extension code a lot easier.
>
>
> OK, it's an interface. Since getting stuff back from C will require a
> copy if the original is not contiquous, a test involving
> a.iscontiguous will be needed and ascontiguous can be dispensed with.
> Isn't there a C version of this anyway? ISTR that numarray had one.
>
It think you are talking about the UPDATEIFCOPY requirements flag on the
PyArray_FromAny C-API. Most aren't using this yet (and it's not directly
exposed to Python). But it's how you would get a copy of the array
with the correct requirements, operate on it and then once you delete
your reference have the information go back into the original array
(this is true whether or not the array is contiguous).
The original array is also set to be read-only during the time that the
copy is available so that you can't make changes to it (that are going
to be lost).
Perhaps what we need to do is make this scheme available to the Python
user as well.
-Travis
More information about the NumPy-Discussion
mailing list