<div class="gmail_quote">On Fri, Sep 30, 2011 at 8:03 AM, John Salvatier <span dir="ltr"><<a href="mailto:jsalvati@u.washington.edu">jsalvati@u.washington.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Using nditer, is it possible to manually handle dimensions  with different lengths? <div><br><div>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)?</div>


</div><div><br></div><div>I want something like this (modified from <a href="http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#putting-the-inner-loop-in-cython" target="_blank">http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#putting-the-inner-loop-in-cython</a>)</div>

<div><br></div><div><div>@cython.boundscheck(False)</div><div>def sum_squares_cy(arr):</div><div>    cdef np.ndarray[double] x</div><div>    cdef np.ndarray[double] y</div><div>    cdef int size</div>
<div>    cdef double value</div><div>    cdef int j</div><div><br></div><div>    axeslist = list(arr.shape)</div><div>    axeslist[1] = -1</div><div><br></div><div>    out = zeros((arr.shape[0], 10))</div><div>    it = np.nditer([arr, out], flags=['reduce_ok', 'external_loop',</div>

<div>                                      'buffered', 'delay_bufalloc'],</div>
<div>                op_flags=[['readonly'], ['readwrite', 'no_broadcast']],</div><div>                op_axes=[None, axeslist],</div><div>                op_dtypes=['float64', 'float64'])</div>


<div>    it.operands[1][...] = 0</div><div>    it.reset()</div><div>    for xarr, yarr in it:</div><div>        x = xarr</div><div>        y = yarr</div><div>        size = x.shape[0]</div><div>        j = 0</div><div>        for i in range(size):</div>


<div>           #some magic here involving indexing into x[i] and y[j]</div><div>    return it.operands[1]</div></div><div><br></div><div>Does this make sense? Is it possible to do?</div></blockquote><div><br></div><div>
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?</div><div><br></div>
<div>-Mark</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/numpy-discussion" target="_blank">http://mail.scipy.org/mailman/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br>