1. Lọc phần tử trong mảng Numpy

Lọc mảng chính là việc chọn lọc ra các phẩn từ thỏa mãn một điều kiện nhất định được lấy ra ở mảng ban đầu và từ đó tạo ra một mảng mới bằng cách thêm các phần tử được lọc ra theo điều kiện vào trong mảng mới này.

Trong Numpy, chúng ta có thể lọc các phần tử trong mảng dựa vào các giá trị True hoặc FalseNếu giá trị tại một chỉ mục là True thì phần tử đó sẽ được lọc ra và thêm vào mảng mới, nếu giá trị tại chỉ mục đó là False thì phần tử đó sẽ vẫn giữ nguyên ở mảng ban đầu.

Ví dụ dưới đây, lọc ra các phần tử trong mảng tại vị trí cần lọc mảng có giá trị là True – các phần tử tại ví trị có giá trị là False sẽ không được lấy ra:

import numpy as np

# Mang a
a = np.array([41, 42, 43, 44, 45, 46])

# Loc cac phan tu co vi tri la true va luu vao mang x
x = a[[True, False, True, False, True, True]]

# Hien thi mang sau khi loc
print(x)

Kết quả:

[41 43 45 46]

Trong ví dụ trên, các phần tử tại chỉ mục a[0], a[2], a[4], a[5] có giá trị là True tương ứng với mảng lọc. Vì vậy kết quả của mảng được lọc ra sẽ là 41, 43, 45, 46

2. Lọc phần tử trong mảng theo điều kiện

Việc lọc mảng dựa theo từng giá trị True hoặc False trong mảng ban đầu cũng được coi là một điều kiện lọc ra các phần tử cho một mảng. Trong đó các phần tử tại ví trí có giá trị True sẽ được lấy ra, trong khi các phần tử tại ví trị có giá trị False sẽ không được lấy ra.

Trong Numpy, chúng ta cũng có thể sử dụng linh hoạt các điều kiện khác để lọc ra các phần tử trong một mảng sao cho phù hợp nhất. Các điều kiện có thể yêu cầu phần tử cần lọc trong mảng ban đầu phải có giá trị bằng hoặc lớn hơn, nhỏ hơn… so với một giá trị cần so sánh.

Ví dụ dưới đây, lọc ra các phần tử có giá trị lớn hơn 42 trong mảng ban đầu và thêm các giá trị True hoặc False tương ứng vào mảng mới sau đó lọc các giá trị từ mảng ban đầu dựa vào các phần tử có giá trị trong mảng lọc là True như sau:

import numpy as np

# Mang a
a = np.array([41, 42, 43, 44, 45, 46])
print("Mang ban dau")
print(a)

# Tao mang chua cac gia tri true hoac false
filter_arr = []

# Duyet mang a
for element in a:
  # Neu phan tu lon hon 42
  if element > 42:
    filter_arr.append(True) # Them True tai vi tri phan tu do
  else: # Nguoc lai, phan tu khong lon hon 42
    filter_arr.append(False) # Them False tai vi tri phan tu do

print("Mang cac vi tri True/False lam dieu kien loc")
print(filter_arr)

# Loc cac phan tu theo mang filter_arr
x = a[filter_arr]
print("Mang sau khi loc")
print(x)

Kết quả:

Mang ban dau
[41 42 43 44 45 46]
Mang cac vi tri True/False lam dieu kien loc
[False, False, True, True, True, True]
Mang sau khi loc
[43 44 45 46]

3. Lọc trực tiếp phần tử trong mảng theo điều kiện

Việc lọc trực tiếp các phần tử trong mảng theo điều kiện chính là việc ta không cần sử dụng các giá trị True hoặc False trong mảng lọc vào để chọn lọc ra các phần tử tại vị trí True nữa, mà thay vào đó ta sẽ truyền trực tiếp các điều kiện cho các phần tử cần lọc ra trong mảng.

Vì thực hiện đưa trực tiếp các điều kiện lọc ra các phần tử cho mảng ban đầu, thế nên cách: “Lọc phần tử trực tiếp theo điều kiện” này lại rất ngắn gọn và dễ sử dụng.

Ví dụ dưới đây, lọc ra các phần tử trong mảng có giá trị lớn hơn 42 như sau:

import numpy as np

# Mang a
a = np.array([41, 42, 43, 44, 45, 46])

# Dieu kien loc cac phan tu trong mang co gia tri lon hon 42
filter_arr = a > 42

# Loc phan tu theo mang filter_arr
x = a[filter_arr]

print("Mang cac vi tri True/False lam dieu kien loc")
print(filter_arr)

print("Mang sau khi loc")
print(x)

Kết quả:

Mang cac vi tri True/False lam dieu kien loc
[False False  True  True  True  True]
Mang sau khi loc
[43 44 45 46]

Ví dụ tiếp theo, lọc ra các phần tử trong mảng ban đầu với điều kiện phải chia hết cho như sau:

import numpy as np

# Mang a
a = np.array([41, 42, 43, 44, 45, 46])

# Dieu kien loc cac phan tu trong mang chia het cho 2
filter_arr = a % 2 == 0

# Loc phan tu theo mang filter_arr
x = a[filter_arr]

print("Mang cac vi tri True/False lam dieu kien loc")
print(filter_arr)

print("Mang sau khi loc")
print(x)

Kết quả:

Mang cac vi tri True/False lam dieu kien loc
[False  True False  True False  True]
Mang sau khi loc
[42 44 46]