Ravel and UnRavel

Top

Questions to David Rotermund

numpy.ravel_multi_index

numpy.ravel_multi_index(multi_index, dims, mode='raise', order='C')

Converts a tuple of index arrays into an array of flat indices, applying boundary modes to the multi-index.

import numpy as np

idx = np.ravel_multi_index(([0, 1, 2], [0, 1, 1]), dims=(3, 2))
print(idx)  # -> [0 3 5]

a = np.zeros((3, 2))
a.flat[idx] = 1
print(a)
print()

a = np.zeros((3, 2))
a.flat[idx] = np.arange(1, idx.shape[0] + 1)
print(a)

Output:

[[1. 0.]
 [0. 1.]
 [0. 1.]]

[[1. 0.]
 [0. 2.]
 [0. 3.]]

numpy.unravel_index

numpy.unravel_index(indices, shape, order='C')

Converts a flat index or array of flat indices into a tuple of coordinate arrays.

import numpy as np

idx = np.ravel_multi_index(([0, 1, 2], [0, 1, 1]), dims=(3, 2))
print(idx)  # -> [0 3 5]

a, b = np.unravel_index(idx, shape=(3, 2))
print(a)  # -> [0 1 2]
print(b)  # -> [0 1 1]

The source code is Open Source and can be found on GitHub.