Cũng giống như các kiểu LIST, Tuple.. trong Python. Mảng trong Numpy cũng có thể được duyệt để xử lý các phần tử có bên trong. Chúng ta có thể duyệt mảng Numpy với vòng lặp for kết hợp với sử dụng đối tượng lặp nditer có sẵn của Numpy.

1. Duyệt mảng Numpy bằng np.nditer()

Thư viện Numpy đã cung cấp sẵn cho chúng ta hàm np.nditer() để duyệt qua các phần tử có trong mảng 1 chiều, 2 chiều….- hàm này cần nhận vào một mảng có kiểu “numpy.array” và thực hiện lặp qua tất cả các phần tử có trong mảng đầu vào.

Ví dụ dưới đây, sử dụng np.nditer() để duyệt qua các phần tử có trong mảng 1 chiều như sau:

import numpy as np

# Tao mang 1 chieu trong khoang 0 den 30 co buoc nhay la 5
a = np.arange(0,30,5)

print("Mang ban dau")
print(a)

print("Duyet cac phan tu trong mang")
for x in np.nditer(a):
   print(x, end=" ")

Kết quả:

[ 0  5 10 15 20 25]
Duye cac phan tu trong mang
0 5 10 15 20 25

Ví dụ tiếp theo, sử dụng hàm np.nditer() để duyệt qua các phần tử có trong mảng 2 chiều có kích thước 2 x 3 như sau:

import numpy as np

# Tao mang 2 chieu co kich thuoc 3 x 2
a = np.arange(0,30,5).reshape(2,3)

print("Mang ban dau")
print(a)

print("Duyet cac phan tu trong mang")
for x in np.nditer(a):
   print(x, end=" ")

Kết quả:

Mang ban dau
[[ 0  5 10]
 [15 20 25]]
Duyet cac phan tu trong mang
0 5 10 15 20 25

2. Duyệt và sửa giá trị của phần tử mảng Numpy

Đối tượng nditer có một tham số tùy chọn khác được gọi là op_flags. Giá trị mặc định của nó là chỉ đọc, nhưng có thể được đặt ở chế độ chỉ đọc-ghi hoặc chỉ ghi. Điều này sẽ cho phép sửa đổi các phần tử mảng bằng cách sử dụng trình lặp này.
Ví dụ dưới đây, lặp qua các phần tử có trong mảng 1 chiều và nhân từng phần tử có trong mảng 1 chiều này với 3 bằng cách sử dụng hàm np.nditer với tham số op_flags = [‘readwrite’] như sau:
import numpy as np

# Tao mang 1 chieu trong khoang 0 den 30 co buoc nhay la 5
a = np.arange(0,30,5)

print("Mang ban dau")
print(a)

# Duyet cac phan tu trong mang va nhan voi 3
for x in np.nditer(a, op_flags = ['readwrite']):
    x[...] = x * 3
    
print("Mang sau khi duyet va nhan voi 3")
print(a)

Kết quả:

Mang ban dau
[ 0  5 10 15 20 25]
Mang sau khi duyet va nhan voi 3
[ 0 15 30 45 60 75]

Ví dụ tiếp theo, lặp qua các phần tử có trong mảng 2 chiều và nhân từng phần tử có trong mảng 2 chiều này với 2 bằng cách sử dụng hàm np.nditer với tham số op_flags = [‘readwrite’] như sau:

import numpy as np

# Tao mang 2 chieu trong khoang 0 den 30 co buoc nhay la 5
a = np.arange(0,30,5).reshape(2,3)

print("Mang ban dau")
print(a)

# Duyet cac phan tu trong mang va nhan voi 2
for x in np.nditer(a, op_flags = ['readwrite']):
    x[...] = x * 2

print("Mang sau khi duyet va nhan voi 2")
print(a)

Kết quả:

Mang ban dau
[[ 0  5 10]
 [15 20 25]]
Mang sau khi duyet va nhan voi 2
[[ 0 10 20]
 [30 40 50]]

3. Duyệt bên ngoài mảng Numpy

Trong những phần trên, chúng ta đã sử dụng hàm np.nditer để lặp qua từng phần tử có trong mảng 1 chiều hoặc mảng 2 chiều. Tuy nhiên, trong mố số trường hợp chúng không cần duyệt và trả về từng phần tử trong mảng mà thay vào đó ta cần duyệt qua mảng và trả về các giá trị sau khi duyệt là các phần tử được xếp vào trong mảng 1 chiều.

Khi đó ta cần sử dụng hàm np.nditer() với tham số flags = [“external_loop “] và tham số order = ‘F’ để cắt ra các phần tử theo cột, ví dụ như sau:

import numpy as np

# Tao mang 2 chieu trong khoang 0 den 30 co buoc nhay la 5
a = np.arange(0,30,5).reshape(2,3)

print("Mang ban dau")
print(a)

print("Mang sau khi duyet")
for x in np.nditer(a, flags = ['external_loop'], order='F'):
    print(x, end=" ")

Kết quả:

Mang ban dau
[[ 0  5 10]
 [15 20 25]]
Mang sau khi duyet
[ 0 15] [ 5 20] [10 25]