[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
<Deil.Christoph@googlemail.com> wrote:
> 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
Graduate Research Assistant
School of Meteorology
University of Oklahoma


More information about the SciPy-User mailing list