Discussion:
[Numpy-discussion] C-API: multidimensional array indexing?
Johann Bauer
2011-07-27 21:37:50 UTC
Permalink
Dear experts,

is there a C-API function for numpy which implements Python's
multidimensional indexing? Say, I have a 2d-array

PyArrayObject * M;

and an index

int i;

how do I extract the i-th row or column M[i,:] respectively M[:,i]?

I am looking for a function which gives again a PyArrayObject * and
which is a view to M (no copied data; the result should be another
PyArrayObject whose data and strides points to the correct memory
portion of M).

I searched the API documentation, Google and mailing lists for quite a
long time but didn't find anything. Can you help me?

Thanks, Johann
Mark Wiebe
2011-07-27 22:25:10 UTC
Permalink
Probably the easiest way is to emulate what Python is doing in M[i,:] and
M[:,i]. You can create the : with PySlice_New(NULL, NULL, NULL), and the i
with PyInt_FromLong. Then create a tuple with Py_BuildValue and use
PyObject_GetItem to do the slicing.

It is possible to do the same thing directly in C, but as you've found there
aren't convenient APIs for this yet.

Cheers,
Mark
Post by Johann Bauer
Dear experts,
is there a C-API function for numpy which implements Python's
multidimensional indexing? Say, I have a 2d-array
PyArrayObject * M;
and an index
int i;
how do I extract the i-th row or column M[i,:] respectively M[:,i]?
I am looking for a function which gives again a PyArrayObject * and
which is a view to M (no copied data; the result should be another
PyArrayObject whose data and strides points to the correct memory
portion of M).
I searched the API documentation, Google and mailing lists for quite a
long time but didn't find anything. Can you help me?
Thanks, Johann
_______________________________________________
NumPy-Discussion mailing list
http://mail.scipy.org/mailman/listinfo/numpy-discussion
Johann Bauer
2011-07-27 23:21:33 UTC
Permalink
Thanks, Mark! Problem solved.

Johann
mpc
2016-03-31 15:18:01 UTC
Permalink
Cool!

But I'm having trouble implementing this, could you provide an example on
how exactly to do this? I'm not sure how to create the appropriate tuple and
how to use it with PyObject_GetItem given an PyArrayObject, unless I'm
misunderstood.

Much appreciated,

Matthew



--
View this message in context: http://numpy-discussion.10968.n7.nabble.com/C-API-multidimensional-array-indexing-tp7413p42693.html
Sent from the Numpy-discussion mailing list archive at Nabble.com.
Loading...