Mảng lọc NumPy


Mảng lọc

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

Trong NumPy, bạn lọc một mảng bằng danh sách chỉ mục boolean .

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

Nếu giá trị tại một chỉ mục là Truephần tử đó được chứa trong mảng đã lọc, nếu giá trị tại chỉ mục đó là Falsephần tử đó sẽ bị loại trừ khỏi mảng đã lọc.

Thí dụ

Tạo một mảng từ các phần tử trên chỉ mục 0 và 2:

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

Ví dụ trên sẽ trả về [41, 43], tại sao?

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


Tạo mảng bộ lọc

Trong ví dụ trên, chúng tôi đã mã hóa cứng các giá trị TrueFalse, nhưng cách sử dụng phổ biến là tạo một mảng bộ lọc dựa trên các điều kiện.

Thí dụ

Tạo một mảng bộ lọc sẽ chỉ trả về các giá trị cao hơn 42:

import numpy as np

arr = np.array([41, 42, 43, 44])

# Create an empty list
filter_arr = []

# go through each element in arr
for element in arr:
  # if the element is higher than 42, set the value to True, otherwise False:
  if element > 42:
    filter_arr.append(True)
  else:
    filter_arr.append(False)

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)


Thí dụ

Tạo một mảng bộ lọc sẽ chỉ trả về các phần tử chẵn từ mảng ban đầu:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

# Create an empty list
filter_arr = []

# go through each element in arr
for element in arr:
  # if the element is completely divisble by 2, set the value to True, otherwise False
  if element % 2 == 0:
    filter_arr.append(True)
  else:
    filter_arr.append(False)

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

Tạo bộ lọc trực tiếp từ mảng

Ví dụ trên là một nhiệm vụ khá phổ biến trong NumPy và NumPy cung cấp một cách hay để giải quyết nó.

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

Thí dụ

Tạo một mảng bộ lọc sẽ chỉ trả về các giá trị cao hơn 42:

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

Thí dụ

Tạo một mảng bộ lọc sẽ chỉ trả về các phần tử chẵn từ mảng ban đầu:

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)