[Numpy-discussion] nditer: possible to manually handle dimensions with different lengths?

John Salvatier jsalvati@u.washington....
Fri Sep 30 10:03:40 CDT 2011


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] x
    cdef np.ndarray[double] y
    cdef int size
    cdef double value
    cdef int j

    axeslist = list(arr.shape)
    axeslist[1] = -1

    out = 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][...] = 0
    it.reset()
    for xarr, yarr in it:
        x = xarr
        y = yarr
        size = x.shape[0]
        j = 0
        for 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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20110930/d203e60e/attachment.html 


More information about the NumPy-Discussion mailing list