In Python, the enumerate
function is a convenient way to iterate over a sequence while keeping track of the index of each item. However, when working with NumPy arrays, the builtin enumerate
function does not work as it only supports Python sequences. Fortunately, NumPy provides an alternative functions, which are specifically designed to iterate over multidimensional arrays while also returning the corresponding index of each element. Let discuss some methods below:
1. Using "np.ndenumerate()" :
You can used np.ndenumerate()
method to find iterate NumPy arrays. np.ndenumerate()
returns an iterator of indexvalue pairs for a given array. Here’s an example given below:

The code creates a 2D NumPy array with the values [[1, 2], [3, 4]].

It then uses the
np.ndenumerate()
function to iterate over the indices and values of the array. 
The
np.ndenumerate()
function returns an iterator that yields the index and corresponding value of each element in the array. 
In this case, the loop iterates over each element in the array and prints its index and value to the console.
In terms of memory, the code creates a 2D NumPy array of size 2x2, which requires 16 bytes of memory. The memory required for the iterator created by np.ndenumerate()
is negligible compared to the memory used by the array. np.ndenumerate()
is more useful because it returns both the indices and the corresponding values.
2. Using "np.ndindex()" :
Another option is to utilize the np.ndindex()
function, which generates an iterator of index tuples for a specified array shape. These index tuples can then be utilized to access the corresponding values within the array. An example to illustrate this is provided below:

The above code first creates a 2D array with the values [[1,2], [3,4]].

Then, it uses the
np.ndindex()
function to create an iterator over the indices of the array. This iterator returns a tuple of indices for each iteration. 
The
for
loop iterates over this iterator and extracts the value of the array at the current index using thearray[index]
syntax. 
The index and value are then printed using the
print()
function.
In terms of memory, the code creates a 2D NumPy array of size 2x2, which requires 16 bytes of memory. The np.ndindex()
function is faster and more memoryefficient because np.ndindex()
returns only the indices of the array.