فیلتر کردن آرایه (Array Filter)
در این صفحه می خواهیم درباره فیلتر کردن آرایه در نامپای صحبت کنیم. یعنی از بین کلی داده، فقط همان چیزهایی را برداریم که به درد ما می خورند؛ مثل وقتی از لیست دانش آموزها فقط غایب ها را می نویسی.
فیلتر کردن آرایه در نامپای یعنی چه؟
فیلتر کردن یعنی از یک آرایه، بعضی عناصر را جدا کنیم و یک آرایه جدید بسازیم. در نامپای این کار با لیست اندیس بولی (Boolean Index List) انجام می شود.
لیست اندیس بولی یعنی یک لیست از مقدارهای True و False که با اندیس های آرایه هم اندازه است. هر جا مقدار True باشد، همان عنصر وارد آرایه جدید می شود و هر جا False باشد، حذف می شود.
فیلتر کردن آرایه با لیست بولی دستی
اول با یک مثال ساده فیلتر کردن آرایه در نامپای را می بینیم. این جا خودمان لیست بولی را می نویسیم.
import numpy as np
arr = np.array([41, 42, 43, 44])
x = [True, False, True, False]
newarr = arr[x]
print(newarr)
در این مثال، فقط اندیس های 0 و 2 مقدار True دارند. پس آرایه جدید فقط شامل 41 و 43 می شود.
ساخت فیلتر با شرط بزرگ تر از 42
حالا می خواهیم فیلتر را خودمان با حلقه بسازیم. شرط ما این است که فقط عددهای بزرگ تر از 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)
در این کد، برای هر عنصر بررسی می کنیم که آیا بزرگ تر از 42 است یا نه. نتیجه یک لیست بولی است و بعد با آن، آرایه را فیلتر می کنیم.
فیلتر کردن عناصر زوج
خیلی وقت ها می خواهیم فقط عددهای زوج را نگه داریم. عدد زوج یعنی عددی که بر 2 تقسیم شود و باقی مانده نداشته باشد؛ مثل 2، 4، 6.
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)
در این مثال، فقط عددهای زوج مثل 2، 4 و 6 در آرایه جدید باقی می مانند. این کار شبیه این است که از لیست نمره ها، فقط آن هایی را برداری که زوج هستند.
ساخت فیلتر مستقیم از خود آرایه
نوشتن حلقه برای هر فیلتر خسته کننده است. خبر خوب این است که نامپای خودش می تواند فیلتر بولی بسازد.
وقتی روی خود آرایه شرط می نویسی، مثل arr > 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)
می بینی که دیگر حلقه ننوشته ایم. همین شرط روی کل آرایه اعمال شده است.
برای عددهای زوج هم دقیقا همین کار را انجام می دهیم. این بار از عملگر % برای گرفتن باقی مانده استفاده می کنیم.
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)
در اینجا متغیر filter_arr یک آرایه بولی است. بعد همان را برای فیلتر کردن آرایه اصلی استفاده می کنیم.
نکته: اگر قبل از فیلتر کردن، داده ها را مرتب کنی، کار با نتایج راحت تر می شود. برای این کار می توانی صفحه مرتب سازی آرایه در نامپای را ببینی.
تمرین عملی فیلتر کردن آرایه در نامپای
برای تمرین بهتر فیلتر کردن آرایه در نامپای این مراحل را انجام بده:
- یک آرایه از نمره های امتحان بساز و فقط نمره های بالای 15 را نگه دار.
- یک آرایه از سن ها بساز و فقط سن های زوج را فیلتر کن.
- نتیجه را با یک آرایه مرتب شده از همان داده ها مقایسه کن و بعد با فیلتر آن را کوچک تر کن.
بعد از این بخش، می توانی همراه با اعداد تصادفی در نامپای تمرین کنی و روی آرایه های تصادفی هم فیلتر بسازی.
جمع بندی سریع
- فیلتر کردن آرایه در نامپای یعنی ساخت آرایه جدید از عناصر منتخب.
- برای فیلتر کردن، از لیست اندیس بولی با مقدارهای
TrueوFalseاستفاده می کنیم. - می توانیم لیست بولی را با حلقه یا مستقیم از آرایه بسازیم.
- شرط هایی مثل
arr > 42یاarr % 2 == 0فیلترهای رایج هستند. - فیلتر کردن همراه با مرتب سازی، ابزار قدرتمندی برای تحلیل داده است.