امروزه اساس هر بسته نرمافزاری یا کتابخانهای که برای محاسبات علمی طراحی گردیده است، محاسبات ماتریسی میباشد. با توجه به این که زبان برنامهنویسی پایتون روز به روز بطور فزایندهای از طرف قشر دانشگاهی برای انجام محاسبات علمی مورد استفاده قرار میگیرد لذا طبیعی است که کتابخانههای متنوعی برای اینکار طراحی شده باشد. یکی از پر طرفدارترین کتابخانههای محاسبات عددی در پایتون، NumPy میباشد. در این نوشته به دنبال معرفی مقدماتی دستورات مورد نیاز برای انجام محاسبات ماتریسی با استفاده از این کتابخانه میباشیم.
بسم الله الرحمن الرحیم
مشابه هر کتابخانه محاسبات علمی دیگر در کتابخانه NumPy نیز امکاناتی برای انجام محاسبات ماتریسی در نظر گرفته شده است که در این نوشته معرفی خواهند شد. بعد از خواندن این نوشته با مفاهیم زیر از این کتابخانه آشنا خواهید شد:
- آرایه NumPy
- ضرب داخلی بردارها
- ضرب خارجی بردارها
- ماتریس NumPy
- ضرب ماتریسی
- معکوس ماتریس
- محاسبه مقادیر ویژه
- محاسبه بردارهای ویژه
- محاسبه مقادیر استثنائی
- …
آرایههای NumPy، چیزی شبیه به لیست هستند با امکانات خیلی بیشتر برای انجام محاسبات عددی. عملگرهای ریاضی هم بر روی این آرایهها قابل انجام هستند ولی بشکل عنصر به عنصر. مثالهای زیر را در نظر بگیرید:
import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) print(a + b) print(a * b) print(a / b) print(a % b)
خروجی این کد به شکل زیر میباشد:
[۵ ۷ ۹] [۴ ۱۰ ۱۸] [۰٫۲۵ ۰٫۴ ۰٫۵ ] [۱ ۲ ۳]
توابع ریاضی موجود در کتابخانه NumPy نیز قابل اعمال بر روی آرایههای NumPy میباشند و بصورت عنصر به عنصر به محاسبه تابع میپردازند. برای ضرب داخلی دو آرایه برداری از تابع dot و برای ضرب خارجی از تابع cross استفاده میشود.
print(np.dot(a, b)) print(np.cross(a, b))
با آرایه میتوان بغیر بردار ماتریس نیز ساخت ولی متفاوت از شی ماتریس در NumPy بوده و خواص متفاوتی دارد. مثال زیر مسئله را روشن میسازد:
c_a = np.array([[1, 2], [3, 4]]) d_a = np.array([[4, 3], [2, 1]]) c_m = np.matrix([[1, 2], [3, 4]]) d_m = np.matrix([[4, 3], [2, 1]]) print(c_a * d_a) print(c_m * d_m)
که خروجی آن به شکل زیر میباشد:
[[۴ ۶] [۶ ۴]] [[ ۸ ۵] [۲۰ ۱۳]]
همانطور که مشاهده میشود آرایه دو بعدی عملگر ضرب را عنصر به عنصر اعمال میکند در حالی که ماتریس ضرب را به شکل ضرب ماتریسی تلقی نموده و انجام میدهد.
اعمال دیگری که معمولا بر روی ماتریسها انجام داده میشود در linalg از کتابخانه NumPy قرار دارد که بطور خلاصه به قرار زیر میباشد:
- معکوس ماتریس: np.linalg.inv
- محاسبه دترمینان ماتریس: np.linalg.det
- مقادیر ویژه ماتریس: np.linalg.eigvals
- محاسبه مقادیر ویژه و بردارهای ویژه دست راست: np.linalg.eig (خروجی این تابع به شکل یک چند تایی است که عنصر اول آرایه مقادیر ویژه و عنصر دوم ماتریسی است که هر ستون آن یکی از بردارهای ویژه میباشد)
- تجزیه svd ماتریس: np.linalg.svd
- تجزیه چولسکی ماتریس: np.linalg.cholesky (دقت کنید که ماتریس شرایط تجزیه پذیری چولسکی را داشته باشد)
- و …
برای آشنایی بیشتر با numpy میتوانید از این نوشته نیز دیدن کنید: