On Mon, Feb 12, 2018 at 6:13 AM, Eugen Wintersberger <
eugen.wintersber...@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
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion

Reply via email to