فهرست سرفصل‌های 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 Search)

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

جستجو در آرایه (Array Search)

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

جستجو در آرایه در نامپای چیست؟

برای جستجو در آرایه در نامپای می توانیم اندیس (Index) عناصر را برگردانیم. اندیس یعنی شماره جای هر مقدار در آرایه؛ مثل شماره صندلی در کلاس.

تابع where() به ما می گوید کدام اندیس ها شرط موردنظر را دارند. خروجی این تابع یک تاپل (Tuple) است؛ یعنی یک بسته چندتایی از آرایه ها.

یافتن اندیس مقدار مشخص با where

اولین استفاده ساده از where() پیدا کردن همه اندیس های یک مقدار مشخص است.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 4, 4])

x = np.where(arr == 4)

print(x)

مشاهده در ادیتور

خروجی چیزی شبیه (array([3, 5, 6],)) است. یعنی مقدار 4 در اندیس های 3 و 5 و 6 آرایه قرار دارد.

پیدا کردن عددهای زوج با where

حالا با همان تابع می توانیم همه عددهای زوج را پیدا کنیم. عدد زوج یعنی عددی که بر 2 تقسیم شود و باقی مانده ندهد.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr % 2 == 0)

print(x)

مشاهده در ادیتور

اینجا arr % 2 == 0 یک شرط منطقی است. این شرط می گوید فقط جاهایی را برگردان که عددشان زوج است.

پیدا کردن عددهای فرد با where

تقریباً همان کد را برای عددهای فرد هم داریم. عدد فرد یعنی وقتی بر 2 تقسیم می شود، باقی مانده 1 باشد.

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr % 2 == 1)

print(x)

مشاهده در ادیتور

در هر دو مثال، where() فقط اندیس ها را برمی گرداند. اگر خود مقدارها را خواستی، می توانی از همین اندیس ها برای دسترسی به آرایه استفاده کنی.

جستجو در آرایه مرتب با searchsorted

تابع searchsorted() روی آرایه مرتب شده استفاده می شود. این تابع می گوید یک عدد جدید را کجای آرایه بگذاریم تا ترتیب به هم نخورد.

این تابع یک نوع جستجوی دودویی (Binary Search) انجام می دهد. یعنی با چند مقایسه کم، جای درست را پیدا می کند.

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7)

print(x)

مشاهده در ادیتور

در این مثال، خروجی 1 است. یعنی عدد 7 باید در اندیس 1 قرار بگیرد تا ترتیب آرایه درست بماند.

جستجو از سمت راست با searchsorted

پیش فرض تابع searchsorted() این است که از سمت چپ آرایه نگاه می کند. اما می توانیم با پارامتر side='right' از سمت راست حساب کنیم.

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7, side='right')

print(x)

مشاهده در ادیتور

اینجا خروجی 2 است. یعنی اگر از سمت راست حساب کنیم، 7 باید در اندیس 2 قرار بگیرد تا ترتیب حفظ شود.

جستجو برای چند مقدار هم زمان

تابع searchsorted() می تواند چند مقدار را هم زمان بررسی کند. کافی است یک آرایه از مقدارهای موردنظر به آن بدهیم.

import numpy as np

arr = np.array([1, 3, 5, 7])

x = np.searchsorted(arr, [2, 4, 6])

print(x)

مشاهده در ادیتور

خروجی [1 2 3] است. یعنی 2 در اندیس 1، عدد 4 در اندیس 2 و عدد 6 در اندیس 3 قرار می گیرند تا آرایه مرتب بماند.

تمرین عملی جستجو در آرایه در نامپای

برای تمرین، چند کار ساده انجام بده:

  1. یک آرایه از نمره ها بساز و با where() اندیس همه نمره های بالای 15 را پیدا کن.
  2. یک آرایه مرتب بساز و با searchsorted() جای چند نمره جدید را حساب کن.
  3. نتایج را با اضافه کردن مقدارها به آرایه اصلی بررسی کن و ببین ترتیب حفظ می شود یا نه.

اگر یادت رفت تقسیم آرایه ها چگونه بود، صفحه تقسیم آرایه ها (Array Split) را ببین. همچنین برای مرتب سازی بعدی می توانی به صفحه مرتب سازی آرایه ها در نامپای سر بزنی. صفحه جستجو در آرایه در نامپای هم می تواند خلاصه دائمی تو برای این مبحث باشد.

جمع بندی سریع

  • جستجو در آرایه در نامپای یعنی پیدا کردن اندیس های مقدارهای خاص.
  • تابع where() اندیس مقدارهایی را برمی گرداند که شرط داده شده را دارند.
  • تابع searchsorted() جای درست درج مقدار در آرایه مرتب را می دهد.
  • پارامتر side مشخص می کند از چپ یا راست جستجو انجام شود.
  • می توان چند مقدار را هم زمان با searchsorted() بررسی کرد.