On Sat, Jan 1, 2011 at 11:23 AM, John Salvatier <jsalv...@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@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion