فهرست سرفصل‌های NumPy
خانه (HOME) مقدمه (Intro) شروع کار (Getting Started) ساخت آرایه ها (Creating Arrays) ایندکس گذاری آرایه (Array Indexing) برش آرایه (Array Slicing) انواع داده (Data Types) کپی در برابر View (Copy vs View) شکل آرایه (Array Shape) تغییر شکل آرایه (Array Reshape) حلقه روی آرایه (Array Iterating) ترکیب آرایه ها (Array Join) تقسیم آرایه ها (Array Split) جستجو در آرایه (Array Search) مرتب سازی آرایه (Array Sort) فیلتر کردن آرایه (Array Filter) مقدمه تصادفی سازی (Random Intro) توزیع داده (Data Distribution) جابه جایی تصادفی (Random Permutation) ماژول Seaborn (Seaborn Module) توزیع نرمال (Normal Distribution) توزیع دوجمله ای (Binomial Distribution) توزیع پواسون (Poisson Distribution) توزیع یکنواخت (Uniform Distribution) توزیع لجستیک (Logistic Distribution) توزیع چندجمله ای (Multinomial Distribution) توزیع نمایی (Exponential Distribution) توزیع کای دو (Chi Square Distribution) توزیع ریلی (Rayleigh Distribution) توزیع پارتو (Pareto Distribution) توزیع زیف (Zipf Distribution) مقدمه ufunc (ufunc Intro) ساخت تابع ufunc (ufunc Create Function) حساب ساده با ufunc (ufunc Simple Arithmetic) گرد کردن اعشار با ufunc (ufunc Rounding Decimals) لگاریتم ها با ufunc (ufunc Logs) جمع ها با ufunc (ufunc Summations) حاصل ضرب ها با ufunc (ufunc Products) تفاضل ها با ufunc (ufunc Differences) کمترین مضرب مشترک با ufunc (ufunc Finding LCM) بزرگترین مقسوم علیه مشترک با ufunc (ufunc Finding GCD) توابع مثلثاتی با ufunc (ufunc Trigonometric) توابع هذلولوی با ufunc (ufunc Hyperbolic) عملیات مجموعه ای با ufunc (ufunc Set Operations) ویرایشگر (Editor) آزمون (Quiz) تمارین (Exercises) سرفصل دوره (Syllabus) برنامه مطالعه (Study Plan) گواهینامه (Certificate)
نتیجه‌ای برای جستجو یافت نشد.
NumPy

NumPy — فیلتر کردن آرایه (Array Filter)

آخرین بروزرسانی: 1404/08/25

فیلتر کردن آرایه (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 یک آرایه بولی است. بعد همان را برای فیلتر کردن آرایه اصلی استفاده می کنیم.

نکته: اگر قبل از فیلتر کردن، داده ها را مرتب کنی، کار با نتایج راحت تر می شود. برای این کار می توانی صفحه مرتب سازی آرایه در نامپای را ببینی.

تمرین عملی فیلتر کردن آرایه در نامپای

برای تمرین بهتر فیلتر کردن آرایه در نامپای این مراحل را انجام بده:

  1. یک آرایه از نمره های امتحان بساز و فقط نمره های بالای 15 را نگه دار.
  2. یک آرایه از سن ها بساز و فقط سن های زوج را فیلتر کن.
  3. نتیجه را با یک آرایه مرتب شده از همان داده ها مقایسه کن و بعد با فیلتر آن را کوچک تر کن.

بعد از این بخش، می توانی همراه با اعداد تصادفی در نامپای تمرین کنی و روی آرایه های تصادفی هم فیلتر بسازی.

جمع بندی سریع

  • فیلتر کردن آرایه در نامپای یعنی ساخت آرایه جدید از عناصر منتخب.
  • برای فیلتر کردن، از لیست اندیس بولی با مقدارهای True و False استفاده می کنیم.
  • می توانیم لیست بولی را با حلقه یا مستقیم از آرایه بسازیم.
  • شرط هایی مثل arr > 42 یا arr % 2 == 0 فیلترهای رایج هستند.
  • فیلتر کردن همراه با مرتب سازی، ابزار قدرتمندی برای تحلیل داده است.