# 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

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

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

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

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

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
```