# [Numpy-discussion] Chaining apply_over_axis for multiple axes.

Sebastian Berg sebastian at sipsolutions.net
Mon May 25 11:21:29 EDT 2015

```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
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150525/ac4ec2d9/attachment.sig>
```