[Python-Dev] C API for appending to arrays
Hrvoje Niksic
hrvoje.niksic at avl.com
Wed Feb 4 12:57:38 CET 2009
Mike Klaas wrote:
> Do you need to append, or are you just looking to create/manipulate an
> array with a bunch of c-float values?
Mostly real-life examples I've seen of this were creating an array from
C values obtained from an external source, such as an on-disk file, or
another process. The code example was a (simplified and de-C++-ized)
snippet of actual code.
> I find As{Write/Read}Buffer sufficient for most of these tasks.
They improve things, as shown in the second example, but they're still
cumbersome to use for appending/initialization of the array.
> (Note that you can
> get the size of the resulting c array more easily than you are by
> using PyObject_Length).
Note that AsWriteBuffer always gives you the buffer size anyway -- you
can't pass bufsize==NULL. Since I have to call AsWriteBuffer in each
iteration (because I don't know when the buffer will resize), calling
PyObject_Length in addition to that doesn't buy much, if anything.
> I've included some example pyrex code that populates a new
> array.array at c speed.
[...]
> cdef int NA
> NA = len(W1)
> W0 = array('d', [colTotal]) * NA
The thing is, when reading values from a file or a general iterator, you
typically don't know the number of values in advance. If I did, I would
probably use an approach similar to yours.
Thanks for the code -- even if it doesn't help in this case, I
appreciate it as an instructing example of the advanced usage of Pyrex.
More information about the Python-Dev
mailing list