[Numpy-discussion] Giving numpy the ability to multi-iterate excluding an axis

John Salvatier jsalvati at u.washington.edu
Tue Jan 4 15:15:56 EST 2011


Wow, great! I'm excited to try this. I think your patch significantly
increases the extendability of numpy.

Is the C-API exposed currently? Can you use the API from Cython (meaning is
the numpy.pxd file updated)?



On Tue, Jan 4, 2011 at 12:04 PM, Mark Wiebe <mwwiebe at gmail.com> wrote:

> On Sat, Jan 1, 2011 at 11:23 AM, John Salvatier <jsalvati at u.washington.edu
> > wrote:
>
>> This thread is a bit old, but since it's not possible to use the C-API is
>> possible to accomplish this same thing with the Python API?
>>
>
> I've committed Python exposure for nested iteration to the new_iterator
> branch.  In doing so, I also changed the mechanism in C.  I found that it
> was simpler to expose to Python if I added a Reset function which gives new
> base data pointers, and this also simplifies C code using nested iterators.
>
> The Python code
>
> a = arange(2).reshape(2,1)
> b = arange(3).reshape(1,3)
>
> i, j = np.nested_iters([a,b], [[0],[1]])
> for x in i:
>     print "inner:"
>     for y in j:
>         print y[0], y[1]
>
>
> gives
>
> inner:
> 0 0
> 0 1
> 0 2
> inner:
> 1 0
> 1 1
> 1 2
>
>
> and C code for nested iteration looks something like this:
>
>         NpyIter *iter1, *iter1;
>         NpyIter_IterNext_Fn iternext1, iternext2;
>         char **dataptrs1;
>
>         /*
>          * With the exact same operands, no copies allowed, and
>          * no axis in op_axes used both in iter1 and iter2.
>          * Buffering may be enabled for iter2, but not for iter1.
>          */
>         iter1 = ...; iter2 = ...;
>
>         iternext1 = NpyIter_GetIterNext(iter1);
>         iternext2 = NpyIter_GetIterNext(iter2);
>         dataptrs1 = NpyIter_GetDataPtrArray(iter1);
>
>         do {
>             NpyIter_ResetBasePointers(iter2, dataptrs1);
>             do {
>                 /* Use the iter2 values */
>             } while (iternext2(iter2));
>         } while (iternext1(iter1));
>
> Cheers,
> Mark
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20110104/0a553ab0/attachment.html>


More information about the NumPy-Discussion mailing list