NumPy Filter Array

فیلتر کردن آرایه‌ها

گرفتن برخی عناصر از یک آرایه و ایجاد یک آرایه جدید بوسیله آن‌ها را فیلتر کردن می‌گویند.

در NumPy فیلتر کردن بر اساس یک لیست ایندکس بولین (boolean index list) انجام می‌گیرد. منظور از لیست ایندکس بولین لیستی از ایندکس‌های مربوطه در آرایه به صورت بولین است.

اگر مقدار در یک ایندکس True باشد، آن مقدار در آرایه فیلتر شده وجود دارد و اگر مقدار در آن ایندکس False باشد آن عنصر از آرایه فیلتر شده خارج می‌شود.

در کد زیر یک آرایه جدید را از عناصر ایندکس‌های صفر و ۲ آرایه موجود ایجاد می‌کنیم.


import numpy as np

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

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

خروجی:

چنانکه انتظار داشتیم خروجی کد بالا شامل اعداد ۴۱ و ۴۳ مربوط به ایندکس‌های صفر و ۲ است.

ساختن آرایه فیلتر

در کد بالا مقادیر True و False به صورت دستی وارد شدند اصطلاحا hard-coded انجام دادیم. روش رایج برای ایجاد یک آرایه فیلتر بر اساس شرط‌ها است. برای نمونه در کد زیر تنها مقادیری که بیشتر از ۴۲ هستند را برمی‌گردانیم.


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)

خروجی:

ایجاد فیلتر به صورت مستقیم از آرایه

مثال بالا یک کار بسیار رایج در NumPy است و به همین جهت NumPy یک راه زیبا برای راحت‌تر کردن‌ آن در نظر گرفته است.

در کد زیر همان مثال بالا را به نحوی که NumPy مسیر را برای ما هموار کرده است انجام می‌دهیم.


import numpy as np

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

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

خروجی:

در مثالی دیگر آرایه‌ای جدید را بر اساس آرایه موجود می‌سازیم به گونه‌ای که تنها اعداد زوج برگردانده شوند.


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)

خروجی: