Cython-users is the appropriate list for this kind of thing (and a
near super-set of this list, so no need to double-post). Incidentally,
I just gave some comments on that thread over there. Definitely report
back when you get something working.

On Mon, Nov 1, 2010 at 1:14 PM, killian koepsell <[email protected]> wrote:
> Hi,
>
> I am not sure if my question is appropriate for the cython-dev list.
> I thought, this might be a pretty common problem and I am curious
> to hear an opinion of the cython developers.
>
> Thanks,
>  Kilian
>
>
> ---------- Forwarded message ----------
> From: killian koepsell <[email protected]>
> Date: Sat, Oct 30, 2010 at 3:14 PM
> Subject: pointers to numpy ndarray / conversion of numpy array to some
> type C++ array
> To: [email protected]
>
>
> Hi,
>
> I would like to access a large number of numpy ndarrays (of different
> size) from cython inside some inner loop. In python I would keep these
> arrays inside an object attribute, such as a dictionary or a list of
> arrays. However, as I understand it, I would always incure a
> significant overhead if I access a python list from within cython
> (since the list members are not typed). What is the best way to attach
> a number of ndarrays to a python object in a way that they are fast
> accessible inside cython without going through the python layer?
>
> I was thinking of keeping a list of pointers in a C++ vector, however
> I did not manage to obtain a pointer to a buffer of type e.g.
> np.ndarray[y[np.double_t, dim=2]. If I only keep a pointer to the
> ndarray.data, I loose the shape and stride information. The workaround
> I came up with is to create an auxiliary struct or cppclass that
> contains all the required information to access a numpy array (data
> pointer, shape, strides) and to keep pointers to these auxiliary
> object in a C++ vector. This works fast but seems somewhat cumbersome.
> In particular, I lose all the nice cython buffer indexing features and
> now have to use pointer arithmetics to access the data. I am wondering
> if there is a better solution. Maybe, it is possible to obtain a
> pointer to the buffer objects that cython uses internally?
>
> Or alternatively, maybe it is possible to create some type of C++
> ndarrays without copying of the data and to store pointers to these
> C++ arrays inside a C++ vector? Blitz, opencv, and boost come to mind,
> but I haven't used either from inside cython. What would be the
> best/easiest way to do that?
>
> Thanks for any suggestions.
>
> Kilian
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to