I apologize, I picked a poor example of what I want to do. Your suggestion would work for the example I provided, but not for a more complex example. My actual task is something like a "group by" operation along a particular axis (with a known number of groups).
On Fri, Sep 30, 2011 at 8:03 AM, John Salvatier <jsalvati@u.washington.edu> wrote:
Using nditer, is it possible to manually handle dimensions with different lengths?For example, lets say I had an array A[5, 100] and I wanted to sample every 10 along the second axis so I would end up with an array B[5,10]. Is it possible to do this with nditer, handling the iteration over the second axis manually of course (probably in cython)?I want something like this (modified from http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#putting-the-inner-loop-in-cython)@cython.boundscheck(False)def sum_squares_cy(arr):cdef np.ndarray[double] xcdef np.ndarray[double] ycdef int sizecdef double valuecdef int jaxeslist = list(arr.shape)axeslist[1] = -1out = zeros((arr.shape[0], 10))it = np.nditer([arr, out], flags=['reduce_ok', 'external_loop','buffered', 'delay_bufalloc'],op_flags=[['readonly'], ['readwrite', 'no_broadcast']],op_axes=[None, axeslist],op_dtypes=['float64', 'float64'])it.operands[1][...] = 0it.reset()for xarr, yarr in it:x = xarry = yarrsize = x.shape[0]j = 0for i in range(size):#some magic here involving indexing into x[i] and y[j]return it.operands[1]Does this make sense? Is it possible to do?I'm not sure I understand precisely what you're asking. Maybe you could reshape A to have shape [5, 10, 10], so that one of those 10's can match up with the 10 in B, perhaps with the op_axes?-Mark
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion