![](https://secure.gravatar.com/avatar/4b748d7edc52453d8470f5307b52db07.jpg?s=120&d=mm&r=g)
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@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