کار دستور flat در numpy پایتون اینه که میاد اعضای آرایه رو در کنار هم در یک «صف» ردیف میکنه! در این مطلب، به طور کامل و با مثال با این دستور آشنا میشیم، همچنین دسترسی به مولفه در flat را نیز بررسی میکنیم!
معنی flat در زبان انگلیسی یعنی “صاف”! (البته معنیهای دیگه هم داره، ولی ما با این کار داریم!)
قطعه کد زیر رو در نظر بگیرید!
import numpy as np a=np.array([ [-10,-8,-6,-4,-2], ["Koolac",2,4,6,8], [10,12,14,16,"Sajjad"]
همینطور که قبلاً در آموزش تعریف آرایه در numpy پایتون گفتیم، در خط اول این کد داریم پکیج numpy رو با نام مستعار np وارد برنامه میکنیم! شاید بپرسید چرا حالا نام مستعار در نظر میگیریم؟! هر چند بالغ بر 20 میلیون بار در آموزشهای مختلف تا الان اینو توضیح دادم!! ولی دوباره توضیح میدم! دلیلش اینه که حال و حوصله نداریم اسم به اون بلندی (مثل numpy رو!) تایپ کنیم و میخوایم بهجاش بنویسیم np که خلاصهتره!
در خط دوم هم یک آرایه تعریف کردیم! [اگر در تعریف آرایه مشکل دارید، به مطلب تعریف آرایه که در بالا لینکش رو قرار دادیم مراجعه کنید!]
میبینید که این آرایهای که اینجا تعریف کردیم همچین صاف و تر و تمیز نیست! و یک آرایه دو بعدی است با ابعاد 3 در 5 !
حالا به نظرتون اگر بخوایم اینو صاف کنیم، یعنی چی؟!
بله درست حدس زدید! یعنی اینکه همه مولفههای این آرایه رو کنار هم (مثل یک صف) ردیف کنیم! یعنی به صورت زیر:
‘-10’, ‘-8’, ‘-6’, ‘-4’, ‘-2’, ‘Koolac’, ‘2’, ‘4’, ‘6’, ‘8’, ’10’, ’12’, ’14’, ’16’, ‘Sajjad’
این بندهخدا flat (که معنیش هم در زبان انگلیسی “صاف” است)، همین کار رو میکنه!
خب پس بریم تا قطعه کد زیر رو توضیح بدم! [توجه کنید که قطعه کد زیر، در ادامه قطعه کدی که در اول مطلب گفتیم، داره تعریف میشه!]
b=a.flat print(b)
خب! در اینجا و در خط 1 میگیم: جناب پایتون، این متغیر a رو بیا صاف کن (flat کن)! و اسم نتیجهی کار رو بذار b !
توی خط بعدی هم مریم که چاپ کنیم همین b رو! و توقع داریم نشون بده:
[‘-10’, ‘-8’, ‘-6’, ‘-4’, ‘-2’, ‘Koolac’, ‘2’, ‘4’, ‘6’, ‘8’, ’10’, ’12’, ’14’, ’16’, ‘Sajjad’]
اما یهو مواجه میشیم با:
<numpy.flatiter object at 0x00000026FEEEDAD0>
برای رفع این مورد، اگر بخوایم اون چیزمیزای داخل آرایه رو مثلاً در قالب یک لیست ببینیم و نه این عبارتِ خوف و خفن بالا رو، فقط کافیه همین عبارت خوف و خفن رو با تابع list تبدیل کنیم به لیست! همین! یعنی کافیه کدهامون رو کمی اصلاح کنیم!
b=list(a.flat) print(b)
در اینجا، اومدیم a رو صاف کردیم و بعد با تابع list تبدیلش کردیم به یک لیست! و اسمش رو گذاشتیم b !
حالا در خط بعدی همین لیست رو چاپ میکنیم! که خروجی میشه!
[‘-10’, ‘-8’, ‘-6’, ‘-4’, ‘-2’, ‘Koolac’, ‘2’, ‘4’, ‘6’, ‘8’, ’10’, ’12’, ’14’, ’16’, ‘Sajjad’]
فرض کنید در همون آرایه خودمون، میخوایم به Koolac دسترسی پیدا کنیم! اندیس Koolac در اون آرایه چند میشه؟! بله درسته! میشه 5 ! (اگر دارید میگید 6 یعنی هنوز به این مبحث مسلط نیستید که اندیسگذاری در پایتون از 0 شروع میشه نه از 1!)
حالا اگر بگیم!:
print(a.flat[5])
میاد همون Koolac رو چاپ میکنه!
نکته: دیگه وفتی دسترسی به مولفه انجام میدیم، لازم نیست تبدیل به لیست بکنیم! (اگر تبدیل به لیست بکنید [مثل قطعه کد زیر] و بعد دسترسی به مولفه انجام بدید، پایتون و numpy دعواتون نمیکنن، اما لازم هم نیست!)
print(list(a.flat)[5])
یه مثال دیگه هم از دسترسی به مولفه بزنیم و والسّلام!
فرض کنید میخوایم به اون کولاک و دوتا بعدش دسترسی پیدا کنیم! یعنی به این چیزی که در زیر میبنیید:
‘Koolac’, ‘2’, ‘4’
خب! اندیس Koolac که 5 بود! اندیس بعدی میشه 6 و بعدیِ اون میشه 7 ! پس چجوری باید به این سهتا دسترسی پیدا کنیم؟!
بله درسته! باید بگیم:
print(a.flat[5:8])
شاید بگید ای دل غافل! چرا گفتیم 5 و 6 و 7 ولی در بالا نوشتیم 5 تا 8!!!! اگر این سوال رو پرسیدید، بازهم یعنی تسلط کافی به دسترسی به مولفه در پایتون ندارید! چون پایتون وقتی مثلاً مینویسید:
[a:b]
اون خود b رو لحاظ نمیکنه و یکی کمترش رو لحاظ میکنه! یعنی عملاً این چیزی که این بالا نوشتیم، یعنی از a تا b-1 !
تاکید میکنم آموزش flat در numpy پایتون به پایان رسید! از اینجا به بعدی یکم میخوایم یه سری چیزها رو عمقیتر بررسی کنیم! ولی قطعاً نیاز به دونستن یه سری نکات پیشنیاز نسبتاً پیشرفتهتر هست! میتونید نخونید و اگر خوندید ولی احساس خوبی بهش نداشتید اصلاً نگران نشید! چون دارم برای چندمین بار تاکید میکنم، آموزش flat تموم شد و از اینجا به بعد میخوایم یه سری چیزها رو عمقیتر بحث کنیم! همین!
پیشنیاز این مبحث تسلط به دو مطلب زیر است!
شی گرایی – آموزش اشیاء و کلاس ها در پایتون (Python) !
مفهوم self و تابع (متد) __init__ در پایتون (python) + مثال کاربردی !
خب جالا یه بار دیگه بیایم باهم یه چیزی رو بررسی کنیم!
این خروجی flat که عبارت زیر رو چاپ کرد، چی بود؟!
<numpy.flatiter object at 0x00000026FEEEDAD0>
جواب اینه که این یک شیء یا object است! و برای همین وقتی میگیم چاپش کن، نمیاد اعداد رو چاپ کنه! حالا ما همینطور که قبلاً گفتیم، اومدیم این شی رو به لیست تبدیل کردیم که واسمون ملموس و قابل دیدن باشه!
آموزش رایگان و کامل زبان برنامه نویسی پایتون به زبان فارسی !
تعداد دیدگاه | 2 |
تعداد بازدید | 3.0K |
تاریخ انتشار | 12/09/2019 |
تاریخ بروزرسانی | 12/09/2019 |
نویسنده | گروه آموزشی کولاک |