Mảng lọc NumPy
Lọc mảng
Lấy một số phần tử ra khỏi 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
thì phần tử đó được chứa trong mảng được lọc, nếu giá trị tại chỉ mục đó là False
thì phần tử đó sẽ bị loại khỏi mảng được lọc.
Ví dụ
Tạo một mảng từ các phần tử ở 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)
Hãy tự mình thử » Ví dụ trên sẽ trả về [41, 43]
, tại sao?
Bởi vì mảng mới chỉ chứa các giá trị trong đó mảng bộ lọc có giá trị True
, trong trường hợp này là chỉ mục 0 và 2.
Tạo mảng 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.
Ví 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)
Hãy tự mình thử » Ví dụ
Tạo một mảng 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)
Hãy tự mình thử »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 lặp trong điều kiện của mình và nó sẽ hoạt động đúng như chúng ta mong đợi.
Ví 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)
Hãy tự mình thử »Ví dụ
Tạo một mảng 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)
Hãy tự mình thử »