[Numpy-discussion] nditer: possible to manually handle dimensions with different lengths?
Fri Sep 30 19:04:41 CDT 2011
On Fri, Sep 30, 2011 at 8:03 AM, John Salvatier
> Using nditer, is it possible to manually handle dimensions with different
> 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
> 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
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion