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
