NumPy Matrix Operation
عملیات ماتریسی
به گفته سایت معتبر towardsdatascience.com حدود 30 الی 40 درصد دانش مورد نیاز برای علوم داده و یادگیری ماشین مربوط به جبر خطی است و عملیات ماتریسی نقش بسیار مهمی در جبر خطی دارد.
در اینجا تعداد محدودی از مهمترین عملیاتهای ماتریسی را که در NumPy قابل اجرا هستند معرفی میکنیم.
تعریف ماتریس در NumPy
در نسخههای قدیمیتر NumPy یک کلاس مختص ماتریسها وجود داشت و برای تعریف ماتریس از np.matrix()
استفاده میشد، اما در نسخههای جدید از همان آرایههای معمول در NumPy که تا الان به معرفی آنها پرداختهایم برای تعریف ماتریس استفاده میشود.
برای مثال فرض کنید میخواهید یک ماتریس 3 در 3 بسازید.
در کد زیر هم 3 ماتریس 6 در 6 ساختهایم. اولی ماتریسی است که همه عناصر آن برابر یک، دومی ماتریسی که همه عناصر آن صفر و سومی یک ماتریس قطری است (ماتریسی که به جز عناصر قطر اصلی آن بقیه برابر صفر هستند).
ضرب داخلی و ضرب خارجی
چنانکه میدانید ضرب داخلی دو بردار برابر یک عدد اسکالر است و ضرب خارجی دو بردار برداری دیگر است که بر هر دو بردار اولیه عمود میباشد.
جهت به دست آوردن ضرب داخلی دو بردار میتوان از یکی از دو تابع inner()
یا dot()
استفاده کرد.
برای به دست آوردن ضرب خارجی دو بردار میتوان از تابع cross()
استفاده کرد.
ضرب ماتریسی
برای به دست آوردن حاصل ضرب دو ماتریس (در صورتی که ابعاد ماتریسها جهت ضرب ماتریسی متناسب باشد)، میتوان از یکی از دو روش آورده شده در کد زیر استفاده کرد.
به دست آوردن مقادیر بیشینه و کمینه در یک ماتریس
برای به دست آوردن مقادیر بیشینه و کمینه در یک ماتریس میتوانید به ترتیب از توابع max()
و min()
استفاده کنید.
همچنین در صورتی که بخواهید شماره ایندکس محل رخداد بیشینه یا کمینه را به دستآورید به ترتیب میتوانید از توابع argmax()
و argmin()
استفاده کنید.
ترانسپوز یک ماتریس
چنانکه میدانید ترانسپوز یک ماتریس با عوض کردن جای سطرها و ستونهای آن به دست میآید. در NumPy سه روش برای انجام این کار وجود دارد که در کد زیر میتوانید آنها را مشاهده کنید.
برای یک بردار هم میتوانید عمل ترانسپوز را انجام دهید. البته در NumPy یک مشکل تکنیکی وجود دارد که نمیتوان عمل ترانسپوز را روی یک آرایه یک بعدی انجام داد. اگر میخواهید که ترانسپوز یک بردار را به دست آورید باید آرایه را به صورت دو بعدی به وسیله دو کروشه به شکل کد زیر مشخص کنید.
توابع hstack ،stack و vstack
گاهی اوقات ممکن است بخواهیم که دنبالهای از آرایهها را در محور دلخواه روی هم بچینیم. در این حالت از تابع stack()
استفاده میکنیم. برای درک بهتر در شکلهای زیر دو نحوه روی هم چیدن آرایهها را نشان دادهایم.
تابع stack()
آرایهها را بر اساس محور تعیین شده برای آن، عنصر به عنصر به هم ملحق میکند. مقدار پیش فرض برای محور صفر در نظر گرفته شده است.
توابع hstack()
و vstack()
هم چنانکه از اسمشان پیداست به ترتیب ماتریسهای داده شده به آنها را به صورت افقی و عمودی در کنار هم میچینند. در حقیقت تابع اول ماتریسهای داده شده به آن را به صورت سطر به سطر در کنار هم قرار میدهد (بسط ماتریس به صورت افقی) و تابع دوم ماتریسهای داده شده به آن را زیر هم قرار میدهد (بسط ماتریس به صورت عمودی).
به دست آوردن تریس یک ماتریس
تریس (trace) یک ماتریس مربعی، به مجموع عناصر قطری آن گفته میشود.
به دست آوردن مرتبه یک ماتریس
مرتبه (rank) یک ماتریس، حداکثر تعداد بردارهای ستونی یا بردارهای سطری مستقل خطی آن ماتریس است.
مدول NumPy شامل تابع linalg مخفف linear algebra است که آن هم شامل بسیاری از مباحث و عملیاتهای جبر خطی میباشد و پیدا کردن مرتبه یا رنک یک ماتریس هم جزو آنها است که در کد زیر آن را مشاهده میکنید.
به دست آوردن دترمینان یک ماتریس
دترمینان یک ماتریس مربعی را میتوان با استفاده از تابع det()
پیدا کرد. این تابع هم مانند پیدا کردن مرتبه یک ماتریس متعلق به پکیچ linalg است.
به دست آوردن معکوس یک ماتریس
یکی دیگر از عملیاتهای ماتریسی متعلق به پکیج linalg به دست آوردن معکوس یک ماتریس مربعی است که توسط تابع inv()
انجام میشود. البته لازم به یادآوری است، در صورتی که دترمینان یک ماتریس برابر صفر باشد آن ماتریس معکوس پذیر نخواهد بود.
در صورتی که ماتریس شما تکین باشد (ماتریسی که دترمینان آن برابر صفر است)، (singular matrix) هر چند نمیتوانید معکوس واقعی آن را محاسبه کنید ولی با استفاده از تابع pinv()
میتوانید شبه معکوس (pseudo inverse) آن را محاسبه کنید.
تابع ()flatten
بعضی اوقات لازم است که ماتریس موجود را به یک آرایه یک بعدی تبدیل کنید. برای انجام چنین کاری میتوانید از تابع flatten()
استفاده کنید.
محاسبه ویژه مقدارها و ویژه بردارهای یک ماتریس
ویژه مقدارها (eigenvalues) و ویژه بردارهای (eignvectors) یک ماتریس را میتوان توسط تابع eig()
به صورت همزمان به دست آورد.