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à True
phần tử đó được chứa trong mảng đã lọc, nếu giá trị tại chỉ mục đó là
False
phầ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ị True
và False
, 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)