On Mo, 2015-05-25 at 21:02 +1000, Andrew Nelson wrote: > I have a function that operates over a 1D array, to return an array of > a similar size. To use it in a 2D fashion I would have to do > something like the following: > > > for row in range(np.size(arr, 0): > arr_out[row] = func(arr[row]) > for col in range(np.size(arr, 1): > arr_out[:, col] = func(arr[:, col]) > > > I would like to generalise this to N dimensions. Does anyone have any > suggestions of how to achieve this? Presumably what I need to do is > build an iterator, and then remove an axis: > > > # arr.shape=(2, 3, 4) > it = np.nditer(arr, flags=['multi_index']) > it.remove_axis(2) > while not it.finished: > arr_out[it.multi_index] = func(arr[it.multi_index]) > it.iternext() >
Just warning that nditer is pretty low level (i.e. can be a bit mind boggling since it is close to the C-side of things). Anyway, you can of course do this just iterating the result. Since you have no buffering, etc. this should work fine. There is also `np.nesterd_iters` but since I am a bit lazy to look it up, you would have to actually check some examples for it from the numpy tests to see how it works probably. - Sebastian > > If I have an array with shape (2, 3, 4) this would allow me to iterate > over the 6 1D arrays that are 4 elements long. However, how do I then > construct the iterator for the preceding axes? > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
