NumPy Array Iteration

NumPy provides an iterator object, i.e., nditer which can be used to iterate over the given array using python standard Iterator interface.

Consider the following example.

Example

snippet
import numpy as np
a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])
print("Printing array:")
print(a);
print("Iterating over the array:")
for x in np.nditer(a):
    print(x,end=' ')

Output:

Output
Printing array: [[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]] Iterating over the array: 1 2 3 4 2 4 5 6 10 20 39 3

Order of the iteration doesn't follow any special ordering like row-major or column-order. However, it is intended to match the memory layout of the array.

Let's iterate over the transpose of the array given in the above example.

Example

snippet
import numpy as np
a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])
print("Printing the array:")
print(a)
print("Printing the transpose of the array:")
at = a.T
print(at)

#this will be same as previous 
for x in np.nditer(at):
    print(print("Iterating over the array:")
for x in np.nditer(a):
    print(x,end=' ')

Output:

Output
Printing the array: [[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]] Printing the transpose of the array: [[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]] 1 2 3 4 2 4 5 6 10 20 39 3

Order of Iteration

As we know, there are two ways of storing values into the numpy arrays:

  1. F-style order
  2. C-style order

Let's see an example of how the numpy Iterator treats the specific orders (F or C).

Example

snippet
import numpy as np

a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])

print("\nPrinting the array:\n")

print(a)

print("\nPrinting the transpose of the array:\n")
at = a.T

print(at)

print("\nIterating over the transposed array\n")

for x in np.nditer(at):
    print(x, end= ' ')

print("\nSorting the transposed array in C-style:\n")

c = at.copy(order = 'C')

print(c)

print("\nIterating over the C-style array:\n")
for x in np.nditer(c):
    print(x,end=' ')
    

d = at.copy(order = 'F')

print(d)
print("Iterating over the F-style array:\n")
for x in np.nditer(d):
    print(x,end=' ')

Output:

Output
Printing the array: [[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]] Printing the transpose of the array: [[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]] Iterating over the transposed array 1 2 3 4 2 4 5 6 10 20 39 3 Sorting the transposed array in C-style: [[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]] Iterating over the C-style array: 1 2 10 2 4 20 3 5 39 4 6 3 [[ 1 2 10] [ 2 4 20] [ 3 5 39] [ 4 6 3]] Iterating over the F-style array: 1 2 3 4 2 4 5 6 10 20 39 3

We can mention the order 'C' or 'F' while defining the Iterator object itself. Consider the following example.

Example

snippet
import numpy as np

a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])

print("\nPrinting the array:\n")

print(a)

print("\nPrinting the transpose of the array:\n")
at = a.T

print(at)

print("\nIterating over the transposed array\n")

for x in np.nditer(at):
    print(x, end= ' ')

print("\nSorting the transposed array in C-style:\n")

print("\nIterating over the C-style array:\n")
for x in np.nditer(at, order = 'C'):
    print(x,end=' ')

Output:

Output
Iterating over the transposed array 1 2 3 4 2 4 5 6 10 20 39 3 Sorting the transposed array in C-style: Iterating over the C-style array: 1 2 10 2 4 20 3 5 39 4 6 3

Array Values Modification

We can not modify the array elements during the iteration since the op-flag associated with the Iterator object is set to readonly.

However, we can set this flag to readwrite or write only to modify the array values. Consider the following example.

Example

snippet
import numpy as np

a = np.array([[1,2,3,4],[2,4,5,6],[10,20,39,3]])

print("\nPrinting the original array:\n")

print(a)

print("\nIterating over the modified array\n")

for x in np.nditer(a, op_flags = ['readwrite']):
    x[...] = 3 * x;
    print(x,end = ' ')

Output:

Output
Printing the original array: [[ 1 2 3 4] [ 2 4 5 6] [10 20 39 3]] Iterating over the modified array 3 6 9 12 6 12 15 18 30 60 117 9
Related Tutorial
Follow Us
https://www.facebook.com/Rookie-Nerd-638990322793530 https://twitter.com/RookieNerdTutor https://plus.google.com/b/117136517396468545840 #
Contents +