در این آموزش با مثال و تمرین به بررسی کامل نحوه محاسبه مقادیر ویژه (eigenvalues) و بردارهای ویژه (eigenvectors) در پایتون (به کمک پکیج numpy) میپردازیم! پس با ما در این آموزش همراه باشید!
به نظرم توضیح الکی ندیم و یه راست بریم سراغ چند مثال خیلی خیلی بهتره!
فرض کنید یک ماتریس 2 در 2 به صورت زیر داریم!
import numpy as np A=np.array([ [7,3], [3,-1] ])
در خط اول که اومدیم پکیج numpy رو تعریف کردیم (که برای کار با آرایههای یک بعدی و دو بعدی و غیره استفاده میشه!)
منتهی اومدیم این پکیج رو با نام مستعار np وارد برنامه کردیم! شاید بپرسید نام مستعار دیگه چه صیغهای است؟! درواقع جواب اینه که من چون حوصله ندارم در طوووول برنامه هِی بگم numpy، میام یه نام مستعار کوتاه براش انتخاب میکنم که از این به بعد اینجوری صداش بزنم!
دقیقاً مثل زندگی روزمره خودمون، که مثلاً به یک بندهخدایی که اسمش “سیاوش” است، میگیم: “سیا”! چون حوصله نداریم اسم طولانیش رو بگیم! [البته که کار زشتی میکنیم!]
در خط دوم به بعد شروع کردیم به تعریف یک آرایه دو بعدی (هموووون ماتریس خودمون!) اگر این آرایه تعریف کردن رو بلد نیستید، باید به مطلب پیشنیاز زیر مراجعه کنید!
آموزش تعریف آرایه (array) در پایتون
پس یک ماتریس 2 در 2 به اسم A تا الان ساختیم!
خب حالا بریم سراغ محاسبه مقادیر ویژه و بردارهای ویژه این بندهخدا (همین A منظورم هست!)
قبل از اینکه این بخش رو شروع کنیم، بذارید از زبان انگلیسی یادآوری کنم که vector یعنی بردار! و value یعنی مقدار!
خب پس تا اینجا یک ماتریس دو در دو تعریف کردیم به اسم A ! حالا بریم که کار اصلی، یعنی محاسبه eigenvalue ها و eigenvector ها رو انجام بدیم! قطعه کد زیر رو در نظر بگیرید!
import numpy as np A=np.array([ [7,3], [3,-1] ]) values,vectors=np.linalg.eig(A) print(values) print(vectors)
خط 1 تا 5 رو که قبلاً توضیح دادم!
در خط 6 داریم میگیم، از پکیج numpy (اگر یادتون باشه، نام مستعار numpy همووون np بود دیگه!)، زیرپکیج linalg (مخفف linear algebra یعنی جبر خطی است!) بیا از تابع eig استفاده کن! این تابع eig، میاد eigها (یعنی eigenvalues و eigenvectors) رو به ما میده!
حالا اینا رو واسه چی ماتریسی بده؟! واسه ماتریس A دیگه!
برای همین توووی ورودی این تابع A نوشتیم!
و توجه کنید که گفتیم این تابع eig به طور همزمان هم مقدار ویژه رو میده و هم بردار ویژه رو! (یعنی به صورت یک ضرب و یهویی دوتاشووون رو خروجی میده!)
برای همین، اون طرف مساوی (منظورم از اووون طرف: طرف چپ تساوی است!) دوتا چیز نوشتیم! تا اولین خروجی (که مقادیر ویژه هست) رو بریزه توی متغیر اول! و دومین خروجی (که بردارهای ویژه هست) رو بریزه توی متغیر دوم!
سوال احتمالی شما: آیا میتونیم به جای اون values و vectors اسمهای دیگهای هم قرار بدیم؟! بله! میتونید Sajjad و Koolac قرار بدید مثلاً یا هرچیز دیگهای که حال میکنید! ولی برای خوانایی بهتر کد، معمولاً یک اسم مرتبط میذارن تا بهتر و خواناتر باشه! ولی برای پایتون اصلاً مهم نیست اسمی که میذارید! از این بابت خیالتون راحت!
در دو خط آخر هم که داریم اوون دو تا متغیری که تعریف کردیم رو چاپ میکنیم!
خروجی:
[ 8. -2.] [[ 0.9486833 -0.31622777] [ 0.31622777 0.9486833 ]]
برای اینکه بتونم توضیح بدم، سعی میکنم تک تک و با چندین رنگ، خروجی رو توضیح بدم:
[ 8. -2.]
اووون 8 مقدار ویژه اول است (که با رنگ قرمز مشخص کردم!) و اوون منفیِ دو هم مقدار ویژه دوم است (که با رنگ سبز مشخص کردم!)
توجه [یادآوری از جبر خطی]: به ازای هر مقدار ویژه یک بردار ویژه خواهیم داشت! پایینو نگاه کنید…!
[[ 0.9486833 -0.31622777]
[ 0.31622777 0.9486833 ]]
اون چیزایی که قرمز کردیم، بردار ویژه اول است! که متناظر با همون مقدار ویژه اول است! (یعنی بردار ویژه، یک بردار ستونی است!)
و اون چیزایی که سبز کردیم هم بردار ویژه دوم است! که متناظر با همون مقدار ویژه دوم است!
هرچند شاید خیلی نیاز نباشه، اما برای فهم بهتر، تصویر زیر رو هم نگاه کنید! توی تصویر به صورت چاپی و شُسته رُفته هر مقدار ویژه و بردار ویژه متناظرش رو براتووون نوشتیم! رنگبندیش هم دقیقاً طبق همین چیزی است که بالا گفتیم! (یعنی قرمز مربوط به بردار ویژه و مقدار ویژه اول است و الی آخر…!)
تابع map در پایتون + ترکیب با تابع lambda
آموزش محاسبه دترمینان یک ماتریس در پایتون !
محاسبه جمع و تفریق و ترانهاده ماتریس در پایتون !
آموزش محاسبه ضرب ماتریسی و ضرب درایه درایه دو ماتریس در پایتون !
آموزش تابع ones و zeros در numpy پایتون !
با این دوتا دستور ones و zeros میتونید ماتریس های مختلفی، با ابعاد مختلفی بسازید که درایههاشون صفر یا یک است!
تعداد دیدگاه | 2 |
تعداد بازدید | 7.4K |
تاریخ انتشار | 28/11/2019 |
تاریخ بروزرسانی | 28/11/2019 |
نویسنده | گروه آموزشی کولاک |