On Fri, Sep 30, 2011 at 8:03 AM, John Salvatier firstname.lastname@example.org:
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-inn... )
@cython.boundscheck(False) def sum_squares_cy(arr): cdef np.ndarray[double] x cdef np.ndarray[double] y cdef int size cdef double value cdef int j
axeslist = list(arr.shape) axeslist = -1 out = zeros((arr.shape, 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[...] = 0 it.reset() for xarr, yarr in it: x = xarr y = yarr size = x.shape j = 0 for i in range(size): #some magic here involving indexing into x[i] and y[j] return it.operands
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?
NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion