# [SciPy-User] flat / nonflat array index conversion

Ryan May rmay31@gmail....
Mon Mar 8 13:51:40 CST 2010

```On Mon, Mar 8, 2010 at 1:02 PM, Christoph Deil
> Is there a numpy function to convert corresponding array indices in flattened / nonflat multidimensional arrays for a given shape?
>
> E.g. for a = array([0,1,2,3,4,5]).reshape(2,3) I want some function that converts e.g. 1 to [0,1] and 5 to [1,2] if I tell it a.shape. For 2D it's of course easy to do it by hand, but I need something that is fast and works for arrays of any dimension.

Look at numpy.unravel_index:

Convert a flat index to an index tuple for an array of given shape.

Parameters
----------
x : int
Flattened index.
dims : tuple of ints
Input shape, the shape of an array into which indexing is
required.

Returns
-------
idx : tuple of ints
Tuple of the same shape as `dims`, containing the unraveled index.

Notes
-----
In the Examples section, since ``arr.flat[x] == arr.max()`` it may be
easier to use flattened indexing than to re-map the index to a tuple.

Examples
--------
>>> arr = np.arange(20).reshape(5, 4)
>>> arr
array([[ 0,  1,  2,  3],
[ 4,  5,  6,  7],
[ 8,  9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
>>> x = arr.argmax()
>>> x
19
>>> dims = arr.shape
>>> idx = np.unravel_index(x, dims)
>>> idx
(4, 3)
>>> arr[idx] == arr.max()
True

Ryan

--
Ryan May