Numpy Array Filter

Mảng lọc Array Filter trong Numpy, có nghĩa là lấy một số phần tử ra khỏi một mảng đã cho và tạo ra một mảng mới từ mảng lọc.

Mảng lọc là một list danh sách các phần tử có giá trị là boolean (True hoặc False).

Trong Numpy lọc một mảng bằng cách sử dụng danh sách chỉ mục index boolean. Danh sách chỉ mục index boolean là danh sách các boolean (True hoặc False) tương ứng với các chỉ mục index trong mảng.

Nếu giá trị tại một index là đúng (True) thì phần tử đó được chứa trong mảng đã lọc, nếu giá trị tại index đó là sai (False) thì phần tử đó sẽ bị loại khỏi mảng đã lọc.

Ví dụ

import numpy as np

arr = np.array([10,11,12,13,14,15])

# Mảng lọc là một list danh sách các phần tử có giá trị là boolean (True or False)
filter_arr = [True, True, False, False, True, True]

# Mảng mới sau khi lọc chỉ chứa các giá trị là True
new_arr = arr[filter_arr]
print(new_arr)

Kết quả :

[10 11 14 15]

- Giải thích :

Kết quả của ví dụ trên trả về [10 11 14 15] . Tại sao kết quả lại vậy ? 

Các phần tử của mảng lọc có giá trị là True tại index 0,1,4,5 và tương ứng là các phần tử có giá trị là 10,11,14,15.

Các phần tử của mảng lọc có giá trị là False tại index 2,3 và tương ứng là các phần tử có giá trị là 12,13. 

Bởi vì mảng sau khi lọc chỉ chứa các giá trị là True, do đó kết quả là : [10 11 14 15]

Cách tạo mảng lọc trong Numpy.

Trong ví dụ ở trên chúng ta đã gán giá trị cố định True và Fasle, nhưng trong thực tế cách phổ biến để tạo một mảng lọc là dựa vào các điều kiện.

Ví dụ tạo mảng lọc của một mảng trong numpy với điều kiện là các phần tử có giá trị lớn hơn 12.

Ví dụ

import numpy as np

arr = np.array([10,11,12,13,14,15])

# Tạo mảng lọc 
filter_arr = []

# Duyệt các phần tử elements trong mảng arr
for element in arr:
    # Nếu phần tử element là lớn hơn 12 gán giá trị là True và khác thì giá trị là False.
    if element > 12:
        filter_arr.append(True)
    else:
        filter_arr.append(False)

# Mảng mới sau khi lọc
new_arr = arr[filter_arr]
print(new_arr)

Kết quả :

[False, False, False, True, True, True]
[13 14 15]

Cách tạo bộ lọc trực tiếp từ mảng.

Ngoài cách tạo bộ lọc thường dùng như ở ví dụ trên, Numpy còn cho phép tạo mảng lọc trực tiếp từ mảng.

Ví dụ

import numpy as np

arr = np.array([10,11,12,13,14,15])

# Tạo mảng lọc 
filter_arr = arr > 12

# Mảng mới sau khi lọc
new_arr = arr[filter_arr]

# In kết quả
print(filter_arr)
print(new_arr)

Kết quả :

[False, False, False, True, True, True]
[13 14 15]