Source code for dipy.core.ndindex

import numpy as np
from numpy.lib.stride_tricks import as_strided


[docs] def ndindex(shape): """ An N-dimensional iterator object to index arrays. Given the shape of an array, an `ndindex` instance iterates over the N-dimensional index of the array. At each iteration a tuple of indices is returned; the last dimension is iterated over first. Parameters ---------- shape : tuple of ints The dimensions of the array. Examples -------- >>> from dipy.core.ndindex import ndindex >>> shape = (3, 2, 1) >>> for index in ndindex(shape): ... print(index) (0, 0, 0) (0, 1, 0) (1, 0, 0) (1, 1, 0) (2, 0, 0) (2, 1, 0) """ if len(shape) == 0: yield () else: x = as_strided(np.zeros(1), shape=shape, strides=np.zeros_like(shape)) try: ndi = np.nditer(x, flags=["multi_index", "zerosize_ok"], order="C") except AttributeError: # nditer only available in numpy >= 1.6 yield from np.ndindex(*shape) else: for _ in ndi: yield ndi.multi_index