On Sep 1, 2008, at 10:41 AM, Hoyt Koepke wrote:

> Hi,
>
> This is actually something I am wondering about as well, so I hope
> it's okay to join the discussion.  My understanding is that when you
> declare a variable to have a list, tuple, or dict type, then cython
> optimizes it by using faster direct ways to accessing the elements
> when you use them. However, since these containers always store the
> elements as PyObject* pointers which hold any type, it's too difficult
> to use element type information in a robust way.  Is that correct?

Exactly.

> What is the most "cythonic" way to mimic the list functionality when
> you do have homogeneous list content?  I have run into cases in
> numerical calculations where I need to be append an arbitrary number
> of numbers to a list (e.g. accumulating data statistics while
> processing large amounts of data).  In such contexts, using a list is
> too slow. One thing I've done is use a numpy array with a significant
> amount of extra space, keep a separate counter to denote the end, and
> access it through the nice buffer interface.  This works pretty well,
> but seems quite clunky compared to how natural it is in python.  Doing
> slicing and concatenation stuff would also be nice.

The traditional way to do this is the same as in C, with malloc,  
realloc, etc. Then one can create actual int*, double*, etc. as in C.  
Of course then one has to worry about memory leaks and/or  
segfaults... The Numpy approach is a good one too, and there is a  
resize() method.

> Personally, what I think would be really nice is a unified wrapper to
> the C++ STL containers and some of the libraries with easy conversion
> functions between the parallel python containers.  I know that
> wrapping an STL vector is one of the examples given, so this shouldn't
> be too hard.  I don't have time for at least a few weeks, and there
> are several other important things on my to-do list, but I'll try to
> look into it.

That would be excellent! It would necessitate using C++, which is not  
going to be the default Cython output but would be very hand for  
people wanting to use it.

> That said, I am pretty new still to cython, so please correct me if my
> perspective on things is off or I'm just plain wrong.

Your assessment is entirely correct.

Another option would be something like http://wiki.cython.org/ 
enhancements/arraytypes, though this is probably further off in the  
future than wrapping several C++ containers.

- Robert


_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to