[Numpy-discussion] Using the C-API iterator with object arrays

Eric Moore ewm at redtetrahedron.org
Mon Feb 12 08:22:36 EST 2018


On Mon, Feb 12, 2018 at 6:13 AM, Eugen Wintersberger <
eugen.wintersberger at gmail.com> wrote:

> Hi there,
> I have a question concerning the numpy iterator C-API. I want to create a
> numpy
> string array using NPY_OBJECT as a datatype for creating the array (the
> reason I am going for this
> approach is that I do not know the length of the individual strings at the
> time I construct
> the array, I only know its shape). The original strings are stored
> in a std::vector<char*> instance. The approach I took was something like
> this
>
>     std::vector<char*> buffer = ....;
>     NpyIter *iter = NpyIter_New(numpy_array,
>                                 NPY_ITER_READWRITE | NPY_ITER_C_INDEX | NPY_ITER_REFS_OK,
>                                 NPY_CORDER , NPY_NO_CASTING,nullptr);
>     if(iter==NULL)
>     {
>       return;
>     }
>     NpyIter_IterNextFunc *iternext = NpyIter_GetIterNext(iter,nullptr);
>     if(iternext == NULL)
>     {
>       std::cerr<<"Could not instantiate next iterator function"<<std::endl;
>       return;
>     }
>     PyObject **dataptr = (PyObject**)NpyIter_GetDataPtrArray(iter);
>     for(auto string: buffer)
>     {
>       dataptr[0] = PyString_FromSting(string); // this string construction seem to work
>       iternext(iter);
>     }
>     NpyIter_Deallocate(iter);
>
>
> This code snippet is a bit stripped down with all the safety checks
> removed to make
> things more readable.
> However, the array I get back still contains only a None instance. Does
> anyone have an idea
> what I am doing wrong here?
> Thanks in advance.
>
> best regards
>    Eugen
>
>
Honestly, given that you're iterating over a single 1D array you've just
constructed, I don't think I would even bother trying to use the iterator.
For this case, a simple loop will be both concise and clear.

Eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20180212/2f37f9b1/attachment.html>


More information about the NumPy-Discussion mailing list