در این آموزش با مثالهای مختلف به صورت کامل به توضیح دستور argsort در پکیج numpy پایتون میپردازیم! این دستور در جاهای مختلف استفاده میشه! یکی از کاربردهایی که من ازش سراغ دارم روش PCA در یادگیری ماشین است!
قبش بذارید هشدار بدم که باید بدونید آرایه چیست و چجوری در پکیج numpy تعریف میشه! اگر بلد نیستید، به آموزش زیر مراجعه کنید و بعد بیاید ادامه این مطلب رو بخونید!
آموزش نحوه ساخت آرایه در numpy پایتون
آرایه زیر رو در نظر بگیرید!:
A=np.array([14,5,100])
مولفهها و اندیسشون رو در زیر میارم (چون جلوتر باهاشون کار دارم!)[قبلش بذارید یادآوری کنم که پایتون از صفر میشماره نه از یک! پس ما هم در پایین سعی میکنیم، با فُرمت پایتون پیش بریم!]
مولفه 0 اُم: 14
مولفه 1 اُم: 5
مولفه 2 اُم: 100 !
حالا فرض کنید قراره این آرایه رو به صورت صعودی مرتب کنیم (sort صعودی! میدونید که در زبان انگلیسی sort یعنی مرتب کردن!)، نحوه قرار گیری مولفهها باید به صورت زیر تغییر کنه!
[5,14,100]
حالا بذارید از شما سوال بپرسم! اووون 5، اندیسش قبل از sort چیبود؟! (بله درست دارید میگید: چون قبل از sort مولفه 1 اُم بود، پس اندیس میشه 1 دیگه!)
اون 14 چی؟! اندیس قبل از sort چند بود؟! (بازهم درست گفتید! اندیسش قبل از sort برابر 0 بود!)
اون 100 چطور؟! (بازهم درست گفتید! اندیسش قبل از sort برابر 2 بوده!)
حالا بذارید محض دلخوشی [!] اعداد sort شده و اندیسهاشون قبل از sort رو زیر هم بیارم!
[5,14,100]
[1,0,2]
چیزی که دستور argsort میده همین خطِ دوم چیزی است که بالا نوشتیم! یعنی:
[1,0,2]
بذارید با یک مثال دیگه، مرور کلیتری بکنیم روی کاری که این دستور انجام میده!
A=np.array([14,7,12,5])
دستور argsort پیش خودِش اینجوری میگه!:
اگر قرار باشه من این لیست رو به صورت صعودی sort کنم، باید مولفه 3اُم رو بذارم اول! [یادآوری میکنم که داریم با فُرمت پایتون میشماریم!]
بعدِش، باید مولفه 1اُم رو بذارم دوم! سپس مولفه 2اُم رو بذارم! در نهایت هم مولفه 0آم رو بذارم!
پس اگر این عددهای قرمز رو کنار هم قرار بدم، میشه:!
[3,1,2,0]
این دقیقاً هموون چیزی است که دستور argsort خروجی میده!
خب! بریم سراغ پیاده سازی این بنده خدا در پایتون !
قطعه کد زیر رو در نظر بگیرید تا خط به خط توضیحش بدم!
import numpy as np A=np.array([14,7,12,5]) order=np.argsort(A) print(order)
در خط 1 داریم پکیج numpy رو با نام مستعار np وارد برنامه میکنیم! چون این دستور argsort توووی پکیج numpy است!
حالا چرا نام مستعار؟! دلیلش اینه که حوصله نداریم اسمِ طوووولانی numpy رو صدا بزنیم! میخوایم بجای گفتن numpy بگیم np! دقیقاً مثل زندگی روزمره که مثلاً به یک نفر که اسمش سیاوش است میگه سیا !
در خط دوم همون آرایه خودمون رو داریم تعریف میکنیم! اگر نمیدونید آرایه چیست، اوایل این مطلب یک لینک گذاشتم تا بهش مراجعه کنید!
در خط سوم هم داریم خروجی دستور argsort رو میریزیم توی متغیری به اسم order ! (من حال کردم اسمش رو بذارم order، ولی واضحه که اسمش مهم نیست! دوست داشتید میتونید بذارید Sajjad !)
در خط آخر هم همین متغیر order رو چاپ میکنم!
خروجی میشه:
[3,1,2,0]
هیچی کار خیلی خاصی قرار نیست بکنید! فقط یک تغییر کوچولو! به قطعه کد زیر توجه کنید!
import numpy as np A=np.array([14,7,12,5]) order=np.argsort(A)[::-1] print(order)
همینطور که میبینید تنها خط سوم کُد بالا فرق کرده و تبدیل شده به!:
order=np.argsort(A)[::-1]
و میبینید فقط اون بخشی که قرمز کردم، اضافه شده! این بخشِ قرمز، میاد خروجی argsort رو چپه میکنه! و رسماً هدف ما که صورت نزولی (به جای صعودی) بود رو ارضا میکنه! پس تموم! این هم از دستور argsort برای sort نزولی !
خروجی:
[0,2,1,3]
من سعی میکنم یکی از تجربههام در استفاده از این دستور رو با شما به اشتراک بذارم! شما هم لطفاً اگر از این دستور درجایی استفاده میکنید یا دیدید که استفاده میکنن، در بخش نظرات با ما در میووون بذارید تا همآموزی خوبی داشته باشیم!
یه توضیح هم بدم که آموزش تموم شده! در ادامه میخوام یکی از کاربردهای این دستور رو بگم که مربوط به PCA است که شاید خیلیها چون حوزهی تحصیلی/کاریشووون این نیست آشنایی نداشته باشن و ادبیاتمووون براشووون غریبه باشه! مهم نیست! چون اینکه جزء آموزش حساب نمیشه که! فقط بیان تجربه است! همین!
مثلاً من میخواستم یه الگوریتم خودم به صورت دستی بنویسم که PCA رو انجام بده! [میدونم مثلاً پکیج scikit-learn پایتون اینو داره، ولی من میخواستم خودم به صورت دستی بنویسم!] اگر آشنایی داشته باشید، میدونید که یه جایی بردار ویژههای مختلفی رو بدست میارید! حالا قراره براساس مقادیر ویژه، ترتیب قرار گیری این این بردارهای ویژه عوض بشه! من برای این مورد از دستور argsort از پکیج numpy پایتون استفاده کردم!
آموزش دستور zip در پایتون برای متناظر کردن دو لیست/آرایه و غیره !
تعداد دیدگاه | 0 |
تعداد بازدید | 3.4K |
تاریخ انتشار | 26/11/2019 |
تاریخ بروزرسانی | 26/11/2019 |
نویسنده | گروه آموزشی کولاک |