[SciPy-user] Best/Safest way to parse NumPy array in C extension?
Lou Pecora
lou_boog2000 at yahoo.com
Tue Dec 12 14:02:15 EST 2006
Thanks for the feedback, Travis. Chris Barker gave
some similar answers, but you both provided
non-overlapping replies. A few questions:
--- Travis Oliphant <oliphant.travis at ieee.org> wrote:
> --- Lou Pecora wrote:
> > or is this better,
> >
> > PyObject *Pymat;
> > PyArrayObject *mat;
> > PyArg_ParseTuple(args, "O", &Pymat);
> >
> mat=PyArray_ContiguousFromObject(objin,NPY_DOUBLE,
> > 2,2);
> It totally depends on what you want. If you just
> pass in the array,
> then you will have to make sure that your code can
> handle the full
> generality of the ndarray (or else have checks on
> the Python-side).
I will have to learn how to check for contiguous in
Python.
> Ndarrays can be arbitrarily strided, mis-aligned,
> out of machine order,
> and of arbitrary data-type.
> > The latter appears to have the constraint that the
> > array be contiguous. Or is that an illusion and
> it's
> > saying it _expects_ a Python object that has
> > contiguous data?
> >
> No, the latter will convert an array to be
> contiguous, in machine
> byteorder (and aligned) and convert it to DOUBLE
> type. So, if your
> code only handles that kind of array, then use the
> conversion function.
Does this conversion mean that the array now has new
data in contiguous form so that operations done on the
data in the C extension (in place) will show up in
that array when I return to the Python caller? (I am
assuming I passed the array in as an arg to the C
extension in the first place.)
> It will be fine until you give it a discontiguous
> array, in the wrong
> byte-order, and possibly mis-aligned (coming from a
> field of another
> array).
>
> -Travis
Got it. It seems that NumPy array creators like
zeros(...) return continguous data. Is that always
true?
-- Lou Pecora
My views are my own.
____________________________________________________________________________________
Need a quick answer? Get one in minutes from people who know.
Ask your question on www.Answers.yahoo.com
More information about the SciPy-User
mailing list