Lọc mảng NumPy

Lọc mảng

Lấy một số phần tử từ mảng hiện có và tạo ra một mảng mới từ chúng gọi là lọc (filtering).

Trong NumPy, chúng ta sử dụng danh sách chỉ số boolean để lọc mảng.

Danh sách chỉ số boolean là danh sách các giá trị boolean tương ứng với các chỉ số trong mảng.

nếu giá trị tại chỉ số là Truenếu phần tử đó sẽ được bao gồm trong mảng đã lọc; nếu giá trị tại chỉ số là Falsenếu phần tử đó sẽ bị loại bỏ khỏi mảng đã lọc.

Mô hình

Tạo ra một mảng từ các phần tử tại các chỉ số 0 và 2, 4:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)

Chạy mô hình

Ví dụ trên sẽ trả về [61, 63, 65]Tại sao?

Bởi vì bộ lọc mới chỉ chứa các phần tử trong mảng bộ lọc có giá trị True giá trị, vì vậy trong trường hợp này, chỉ số là 0 và 2, 4.

mảng bộ lọc

Trong ví dụ trên, chúng ta đã tạo ra TrueFalse Giá trị được mã hóa cứng, nhưng mục đích thông thường là tạo ra một mảng bộ lọc dựa trên điều kiện.

Mô hình

Tạo một mảng lọc chỉ trả về các giá trị lớn hơn 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# Tạo một danh sách rỗng
filter_arr = []
# Duyệt qua từng phần tử trong arr
for element in arr:
  # Nếu phần tử lớn hơn 62, thì đặt giá trị là True, ngược lại là False:
  if element > 62:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Chạy mô hình

Mô hình

Tạo một mảng lọc, chỉ trả về các phần tử chẵn trong mảng nguyên bản:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# Tạo một danh sách rỗng
filter_arr = []
# Duyệt qua từng phần tử trong arr
for element in arr:
  # Nếu phần tử có thể chia hết cho 2, đặt giá trị là True, nếu không đặt là False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Chạy mô hình

Tạo trực tiếp mảng lọc

Ví dụ trên là một nhiệm vụ rất phổ biến trong NumPy, NumPy cung cấp các phương pháp tốt để giải quyết vấn đề này.

Chúng ta có thể thay thế trực tiếp mảng trong điều kiện thay vì biến iterable, nó sẽ hoạt động như mong đợi.

Mô hình

Tạo một mảng lọc chỉ trả về các giá trị lớn hơn 62:

import numpy as np
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Chạy mô hình

Mô hình

Tạo một mảng lọc, chỉ trả về các phần tử chẵn trong mảng nguyên bản:

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr = arr % 2 == 0
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)

Chạy mô hình