انواع indexing آرایه در پایتون

انواع indexing آرایه در پایتون
17 بازدید
۱۴۰۴-۰۹-۲۳
8 دقیقه
  • نویسنده: Sepehr Kouzegaran
  • درباره نویسنده: ---

انواع indexing آرایه در پایتون

کارکردن با آرایه‌ها در زبان‌های برنامه‌نویسی اهمیت بالایی دارد. در بسیاری از برنامه‌هایی که برای شبیه‌سازی‌کردن سیستم‌ها، پردازش سیگنال و… می‌نویسیم نیاز هست که از آرایه‌ها استفاده کنیم. برای انجام محاسبات با مقادیر موجود در آرایه‌ها، می‌توان از حلقه‌های for و while استفاده کرد. در این روش در هر تکرار حلقه مقدار موجود در اندیس‌های آرایه را انتخاب کرده و می‌توان پردازش و محاسبات موردنظر را انجام داد.

هنگام کار با آرایه‌ها در زبان‌های پیشرفته، بهتر است تا جای ممکن از استفاده‌کردن از حلقه‌ها بپرهیزیم، چرا که باعث کندشدن اجرا برنامه می‌شوند. استفاده‌کردن از امکانات موجود در زبان‌های برنامه‌نویسی برای indexing آرایه‌ها باعث می‌شود برنامه‌ی موردنظر سریع‌تر از حالتی که خودمان با استفاده از حلقه‌ها می‌نویسیم اجرا شوند. در این حالت حلقه‌ به‌صورت بهینه پیاده‌سازی شده و همین موضوع باعث اجرای سریع‌تر برنامه می‌شود. در این آموزش می‌خواهیم انواع روش‌های indexing آرایه‌های Numpy در پایتون را بررسی کنیم. روش‌های indexing مطرح شده را می‌توان هنگام کار با آرایه‌های Matlab نیز استفاده کرد.

✅ نکته

اندیس دهی لیست، آرایه و… در زبان پایتون به‌صورت Zero-based می‌باشد، یعنی اندیس اولین المان آرایه 0، اندیس دومین المان آرایه 1 و… می‌باشد. زبان‌های برنامه‌نویسی که اندیس دهی در آن‌ها به‌صورت One-based می‌باشد، اندیس اولین المان آرایه برابر با 1 می‌باشد. اندیس دهی آرایه‌ها در اکثر زبان‌های برنامه‌نویسی مانند C، C++، C#، Python، Java، Javascript، PHP و… به‌صورت Zero-based می‌باشد؛ ولی در Matlab اندیس آرایه‌ها از 1 شروع می‌شود.

برای تولید بازه‌ای از اعداد با فاصله‌ی ثابت از همدیگر، می‌توان از تابع arange موجود در کتابخانه Numpy استفاده کرد. این تابع مقدار شروع بازه، پایان بازه و گام را دریافت کرده (arange(start, stop, step)) و اعداد موجود در بازه‌ی بسته‌ی مقدار شروع تا بازه‌ی باز مقدار پایان را با گام در نظر گرفته شده تولید می‌کند. مقدار پیش‌فرض آرگومان step (گام)، یک می‌باشد. می‌خواهیم یک آرایه شامل مقادیر از صفر تا 9 را ایجاد کنیم، برای این کار می‌توانیم np.arange(0, 10) یا np.arange(10) را اجرا می‌کنیم. مقدار پیش‌فرض شروع بازه صفر می‌باشد، بنابراین می‌توانیم زمانی که بازه شروع صفر هست فقط مقدار انتهای بازه را مشخص کنیم.

انواع indexing آرایه در پایتون

برای انتخاب یک مقدار از آرایه، پس از متغیر آرایه اندیس موردنظر را در داخل براکت می‌نویسیم. با این کار اندیس موردنظر از آرایه انتخاب می‌شود و می‌توان مقدار موجود در آن آدرس را استفاده کرده و یا مقدار آن اندیس را تغییر داد.

انواع indexing آرایه در پایتون

انتخاب برشی از آرایه (Slicing)

در indexing آرایه‌ها، به‌دست‌آوردن برشی از آرایه بسیار پرکاربرد می‌باشد. در این روش برشی از آرایه را می‌توان انتخاب کرده و از مقادیر آن استفاده کنیم و یا آن‌ها را تغییر دهیم. در این روش اندیس شروع و پایان را مشخص می‌کنیم و مقادیر موجود در آرایه را از اندیس شروع (خود مقدار اندیس شروع را شامل می‌شود) تا بازه‌ی باز اندیس پایان (خود مقدار اندیس پایان را شامل نمی‌شود) در آرایه انتخاب می‌شود. می‌توان گام را نیز مشخص کرد (اختیاری است).

برای به‌دست‌آوردن برشی از آرایه، در داخل براکت ابتدا اندیس شروع (اگر صفر باشد می‌توان آن را ننوشت) را نوشته و بعد از اندیس پایان را می‌نویسیم و بین آن‌ها دونقطه “:” قرار می‌دهیم. برای مشخص‌کردن گام، مقدار گام را پس از اندیس پایان می‌نویسیم.

انواع برش‌ها

  • a[start_index:stop_index]
  • a[:stop_index] # start_index is 0
  • a[start_index:] # stop_index is 0
  • a[start_index:stop_index:step] # step is optional
  • a[start_index::step] # stop_index is 0
  • a[:stop_index:step] # start_index is 0
  • a[::step] # stop_index and start_index is 0

مثال‌ها:

انتخاب اندیس‌های 2 تا خود 4:

انواع indexing آرایه در پایتون

انتخاب اندیس‌های زوج (کاهش نرخ یا downsampling با نرخ 2):

انواع indexing آرایه در پایتون

انتخاب اندیس‌های فرد (کاهش نرخ یا downsampling با نرخ 2):

انواع indexing آرایه در پایتون

توجه داشته باشید که آرایه‌ای که برگردانده می‌شود یک view از آرایه اصلی می‌باشد (کپی سطحی)، یعنی مقادیر انتخاب شده به‌جای دیگری از حافظه کپی نمی‌شوند و اندیس‌های آرایه جدید به همان آدرس مقادیر که در آرایه a در آن قرار دارند اشاره می‌کنند. به همین دلیل اگر مقدار موجود در اندیسی از آرایه b را تغییر دهیم، این مقدار در آرایه a هم تغییر می‌کند. اندیس صفر از آرایه b برابر با اندیس 1 از آرایه a می‌باشد. مقدار b[1] را به 999 تغییر داده و مقادیر موجود در آرایه a را مجدد بررسی می‌کنیم.

انواع indexing آرایه در پایتون

برای اینکه مقادیر انتخاب شده از آرایه در خانه‌های دیگری از حافظه کپی شوند (کپی عمیق) تا اتفاق بالا رخ ندهد از متد copy استفاده می‌کنیم (کپی مقادیر از view برش موردنظر را برمی‌گرداند).

انواع indexing آرایه در پایتون

به‌دست‌آوردن برشی از ماتریس (آرایه‌ی دوبعدی)

برای آرایه‌های دوبعدی در داخل براکت ابتدا سطرها و پس از کاما “,” ستون‌های موردنظر را انتخاب می‌کنیم. در حالت کلی برای آرایه‌های چندبعدی، به ترتیب اندیس‌های موردنظر از بعد صفر سپس بعد یک و… را در داخل براکت تعیین می‌کنیم.

مثال‌ها:

انتخاب سطر 0:

انواع indexing آرایه در پایتون

انتخاب سطرهای 0 تا 2 :

انواع indexing آرایه در پایتون

انتخاب سطرها و ستون‌های 0 تا 2 :

شاید برای شما مفید باشد:
ابزار حرفه ای avrdude برای پروگرام کردن AVR

انواع indexing آرایه در پایتون

انتخاب ستون‌های 0 تا 2 (انتخاب همه سطرها) :

انواع indexing آرایه در پایتون

انتخاب چند مقدار از آرایه (Fancy indexing)

در آرایه‌های numpy می‌توان چند مقدار را انتخاب کرد. در این حالت اندیس‌های موردنظر را به‌صورت آرایه یا لیستی از اعداد صحیح (integer) به‌عنوان اندیس (آرایه اندیس‌ها) برای انتخاب مقادیر موردنظر استفاده می‌کنیم. در مثال زیر اندیس‌های 4 و 6 و 1 از آرایه a را انتخاب می کنیم. برای این کار در یک لیست اندیس های مطلوب را قرار داده و از این آرایه به عنوان اندیس استفاده می کنیم. در خروجی می توان مشاهده کرد مقدار متناظر با اندیس های مورد نظرانتخاب شده و به ترتیب در آرایه ی خروجی برگردانده می شود.

انواع indexing آرایه در پایتون

در این حالت اندیس‌های انتخاب شده در قسمت دیگری از حافظه کپی می‌شوند (کپی مقادیر برگردانده می‌شود نه view) بنابراین در این حالت اگر محتوای موجود در اندیسی از آرایه‌ی b را تغییر دهیم، مقادیر موجود در آرایه a تغییر نمی‌کنند.

انواع indexing آرایه در پایتون

آرایه اندیس‌ها را می‌توان با استفاده از تابع np.arange و یا تابع range که یک تابع buit-in در پایتون می‌باشد ایجاد کرد. در مثال زیر می‌خواهیم اندیس‌های زوج (0, 2, 4, 6, …) آرایه a را انتخاب کنیم.

  • با استفاده از arange

انواع indexing آرایه در پایتون

ابتدا یک آرایه‌ای از مقادیر در بازه 0 تا طول آرایه a با گام 2 ایجاد می‌کنیم (آرایه اندیس‌های زوج) و سپس از این آرایه به عنوان اندیس استفاده می‌کنیم. می‌توان اندیس‌های مطلوب را در یک متغیر قرار داد و از آن متغیر استفاده کرد.

  • با استفاده از range

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

انواع indexing آرایه در پایتون

انتخاب مقادیر با ماسک منطقی (Boolean indexing)

یکی از indexingهای پرکاربرد روش Boolean indexing می‌باشد. برای انتخاب مقادیر مطلوب از یک آرایه می‌توان از یک آرایه شامل مقادیر True و False که هم اندازه با آرایه اصلی می‌باشد استفاده کرد. به این آرایه، آرایه ماسک mask)) گفته می‌شود. اندیس‌هایی از آرایه انتخاب می‌شوند که مقدار موجود در آن اندیس‌ها در آرایه ماسک True باشد.

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

انواع indexing آرایه در پایتون

می‌توان مقدار اندیس‌های انتخاب شده را با استفاده از یک آرایه هم طول با مقادیر انتخاب شده تغییر داد.

انواع indexing آرایه در پایتون

و یا کل مقدار اندیس‌های انتخاب شده را می‌توان یک مقدار تغییر داد. سه اندیس ابتدایی از آرایه را انتخاب کرده و مقدار آن‌ها را به 0 تغییر می‌دهیم.

انواع indexing آرایه در پایتون

برای تولید ماسک می‌توان از اپراتورهای مقایسه‌ای >، <، =>، =<، == و!= استفاده کرد. برای مثال اگر بخواهیم مقادیر کمتر از 40 را در آرایه a انتخاب کنیم، آرایه a < 40 را به‌عنوان آرایه ماسک استفاده می‌کنیم. با اجرای a < 40، یک آرایه logical (آرایه‌ای فقط شامل مقادیر True و False) برگردانده می‌شود که اندیس‌هایی که مقدار موجود در آرایه a کمتر از 40 است True و مابقی False هستند. حال با استفاده از این روش می‌توان مقادیر موردنظر در آرایه را انتخاب نمود.

انواع indexing آرایه در پایتون

می‌توان چند ماسک منطقی هم طول را با استفاده از اپراتورهای منطقی ~، &، |، ^ ترکیب کرده و از ماسک به‌دست‌آمده استفاده کنیم. می‌خواهیم اندیس‌هایی از آرایه را انتخاب کنیم که مقدار آن‌ها بزرگ‌تر از 5 و کمتر از 23 باشد. دو آرایه ماسک با این شرایط ایجاد کرده و & (and) بین آن‌ها را محاسبه می‌کنیم و از آرایه بدست آمده به‌عنوان ماسک استفاده می‌کنیم.

انواع indexing آرایه در پایتون

برای انتخاب مقادیری که زوج هستند، ابتدا باقی‌مانده اعداد را به 2 محاسبه کرده (a % 2) و هر یک از آن ها که 0 باشد را انتخاب می‌کنیم (a % 2 == 0).

انواع indexing آرایه در پایتون

برای انتخاب مقادیری که ضریب 3 نیستند ابتدا ماسک مربوط به حالتی که ضرایب 3 هستند را به صورت a % 3 == 0 محاسبه می‌کنیم و سپس با not کردن ماسک بدست آمده مقادیری که ضریب 3 نیستند را انتخاب می‌کنیم.

انواع indexing آرایه در پایتون

این نوع indexing بسیار پرکاربرد بوده و در حالت‌های مختلفی مانند

  • انتخاب مقادیر کمتر یا بیشتر از آستانه یا دارای شرایط خاص
  • حذف مقادیر پرت
  • پیاده‌سازی به اشباع رفتن سیگنال
  • فیلترکردن (انتخاب مقادیر موجود در فرکانس‌های مطلوب)
  • انتخاب زمان‌های مطلوب
  • و…

می‌توان استفاده کرد.

در مثال زیر می‌خواهیم سیگنال پله را تعریف کنیم. تابع پله در زمان‌های مثبت 1 بوده و در زمان‌های منفی مقدار آن 0 می‌باشد. آرایه ی زمان n را در بازه -4 تا 5 ایجاد می‌کنیم. برای تعریف سیگنال پله u در این بازه  زمانی، ابتدا u را یک آرایه تمام صفر و هم طول با آرایه زمان (n) تعریف می‌کنیم. سپس از روی آرایه زمان (n)، آرایه ماسک را ایجاد می‌کنیم. آرایه ماسک را زمان@های بزرگ‌تر مساوی 0 درنظر می‌گیریم (n >= 0). سپس از آرایه ماسک استفاده کرده و این اندیس‌ها از آرایه تمام صفر u را انتخاب کرده و مقدار آنها را به 1 تغییر می‌دهیم.

شاید برای شما مفید باشد:
ساخت و طراحی LED چشمک‌زن با STM8 | قسمت هفتم

انواع indexing آرایه در پایتون

در این آموزش روش‌های مختلف indexing آرایه‌های numpy در پایتون را یاد گرفتیم. هنگام کارکردن با آرایه‌های Matlab نیز می‌توانید از این روش‌ها استفاده کنید فقط با این تفاوت که در Matlab اندیس‌ها از 1 شروع می‌شوند.

مرجع: آموزش کتابخانه Numpy – مدرس حمید دانشجو 

اطلاعات
17
0
0
اشتراک و حمایت
profile نویسنده: Sepehr Kouzegaran متخصص الکترونیک

ویراستار: مریم میریان
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله