Yeah, the iterator handles all that stuff, so pulling it fully out requires doing this by hand with copyswap and possibly other casting functions (I do not know this well either, it shouldn't be hard, but I am not sure what is needed exactly). A middle way would maybe be to abuse the new iterator. I.e. build up the iterator before the loop for a single item. I think you can then change the baseptrs of the iterator + reset it, np.nested_iters does something like it. Would be a little bit slower, but at least we don't create new arrays and iterators for each item.