از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
آموزش NumPy: یک راهنمای ساده مبتنی بر مثال
سرفصلهای مطلب
معرفی
را NumPy library یک کتابخانه محبوب پایتون است که برای برنامههای محاسباتی علمی استفاده میشود و مخفف عبارت Numerical Python است.
عملیات NumPy به سه دسته اصلی تقسیم می شود: تبدیل فوریه و دستکاری شکل، عملیات ریاضی و منطقی، و جبر خطی و تولید اعداد تصادفی. برای اینکه آن را هر چه سریعتر انجام دهید، NumPy در C و Python نوشته شده است.
در این مقاله به معرفی مختصری از پشته NumPy می پردازیم و خواهیم دید که چگونه می توان از کتابخانه NumPy برای انجام انواع وظایف ریاضی استفاده کرد.
مزایای NumPy
NumPy نسبت به استفاده از توابع ریاضی هسته پایتون چندین مزیت دارد که در اینجا به چند مورد اشاره می شود:
- NumPy در مقایسه با پایتون اصلی به دلیل استفاده زیاد از پسوندهای C بسیار سریع است.
- بسیاری از کتابخانه های پیشرفته پایتون، مانند Scikit-Learn، Scipy و Keras، از کتابخانه NumPy استفاده گسترده ای می کنند. بنابراین، اگر قصد دارید شغلی را در علم داده یا یادگیری ماشین دنبال کنید، NumPy ابزار بسیار خوبی برای تسلط است.
- NumPy با انواع عملکردهای داخلی همراه است که در پایتون هسته کمی کد سفارشی را به خود اختصاص می دهد.
در مورد آخرین نکته، به اسکریپت زیر توجه کنید:
x = (2, 3, 4, 5, 6)
y = (a + 2 for a in x)
در اینجا، به منظور اضافه کردن 2 به هر عنصر در لیست x
، باید کل لیست را طی کنیم و به هر عنصر به صورت جداگانه 2 عدد اضافه کنیم. حالا بیایید ببینیم چگونه می توانیم همان کار را با کتابخانه NumPy انجام دهیم:
import numpy as np
nums = np.array((2, 3, 4, 5, 6))
nums2 = nums + 2
می توانید ببینید که چقدر آسان است که به هر عنصر در لیست از طریق NumPy یک مقدار اسکالر اضافه کنید. این نه تنها قابل خواندن است، بلکه در مقایسه با کد قبلی سریعتر است.
این فقط نوک کوه یخ است، در حقیقت، کتابخانه NumPy قادر است عملیات بسیار پیچیده تری را در یک چشم به هم زدن انجام دهد. بیایید برخی از این عملیات را بررسی کنیم.
عملیات NumPy
قبل از اینکه بتوانیم عملیات NumPy را انجام دهیم، باید بسته NumPy را نصب کنیم. برای نصب بسته NumPy می توانید از pip نصاب. برای نصب دستور زیر را اجرا کنید:
$ pip install numpy
در غیر این صورت، اگر پایتون را از طریق توزیع Anaconda اجرا می کنید، می توانید دستور زیر را به جای آن اجرا کنید:
$ conda install numpy
اکنون که NumPy نصب شده است، بیایید برخی از رایج ترین عملیات کتابخانه را ببینیم.
ایجاد یک آرایه NumPy
آرایه های NumPy بلوک های سازنده اکثر عملیات NumPy هستند. آرایه های NumPy را می توان به دو نوع تقسیم کرد: آرایه های یک بعدی و آرایه های دو بعدی.
راه های مختلفی برای ایجاد آرایه NumPy وجود دارد. در این بخش به چند مورد از آنها می پردازیم.
را array
روش
برای ایجاد یک آرایه NumPy یک بعدی، می توانیم به سادگی یک لیست پایتون را به آن ارسال کنیم array
روش. برای مثال اسکریپت زیر را بررسی کنید:
import numpy as np
x = (2, 3, 4, 5, 6)
nums = np.array((2, 3, 4, 5, 6))
type(nums)
در اسکریپت بالا ابتدا کتابخانه NumPy را به عنوان وارد کردیم np
، و یک لیست ایجاد کرد x
. سپس این لیست را به array
عملکرد کتابخانه NumPy در نهایت نوع آرایه را چاپ کردیم که خروجی زیر حاصل شد:
numpy.ndarray
اگر قرار بود print را nums
آرایه روی صفحه نمایش، شما آن را به شکل زیر نمایش داده می شود:
array((2, 3, 4, 5, 6))
برای ایجاد یک آرایه دو بعدی، می توانید لیستی از لیست ها را به آن ارسال کنید array
روشی که در زیر نشان داده شده است:
nums = np.array(((2,4,6), (8,10,12), (14,16,18)))
اسکریپت بالا منجر به ماتریسی می شود که در آن هر لیست داخلی در لیست بیرونی به یک ردیف تبدیل می شود. تعداد ستون ها برابر است با تعداد عناصر موجود در هر لیست داخلی. ماتریس خروجی به شکل زیر خواهد بود:
array((( 2, 4, 6),
( 8, 10, 12),
(14, 16, 18)))
را arange
روش
یکی دیگر از روش های رایج برای ایجاد آرایه NumPy، روش است arange
روش. این روش شاخص شروع آرایه، شاخص پایان و اندازه گام (که اختیاری است) را می گیرد. به مثال زیر دقت کنید:
nums = np.arange(2, 7)
به اندازه کافی ساده، درست است؟ اسکریپت بالا یک آرایه NumPy با اندازه 5 را با عناصر 2، 3، 4، 5 و 6 برمی گرداند. به یاد داشته باشید که arange
متد آرایه ای را برمی گرداند که با شاخص شروع شروع می شود و به یک اندیس کمتر از اندیس پایانی ختم می شود. خروجی این کد به شکل زیر است:
array((2, 3, 4, 5, 6))
حالا بیایید اندازه مرحله 2 را به آرایه خود اضافه کنیم و ببینیم چه اتفاقی می افتد:
nums = np.arange(2, 7, 2)
اکنون خروجی به شکل زیر است:
array((2, 4, 6))
می بینید که آرایه از 2 شروع می شود و سپس اندازه گام 2 می آید و به 6 ختم می شود که یک کمتر از اندیس انتهایی است.
را zeros
روش
جدا از ایجاد آرایه های سفارشی با داده های از پیش پر شده خود، می توانید آرایه های NumPy را با مجموعه ای ساده تر از داده ها نیز ایجاد کنید. به عنوان مثال، شما می توانید استفاده کنید zeros
روشی برای ایجاد یک آرایه از تمام صفرها مانند شکل زیر:
zeros = np.zeros(5)
اسکریپت فوق یک آرایه یک بعدی 5 صفر را برمی گرداند. چاپ کنید zeros
آرایه و باید موارد زیر را ببینید:
array((0., 0., 0., 0., 0.))
به طور مشابه، برای ایجاد یک آرایه دو بعدی، می توانید تعداد سطرها و ستون ها را به zeros
روش، همانطور که در زیر نشان داده شده است:
zeros = np.zeros((5, 4))
اسکریپت بالا یک آرایه دو بعدی از 5 سطر و 4 ستون را برمی گرداند:
array(((0., 0., 0., 0.),
(0., 0., 0., 0.),
(0., 0., 0., 0.),
(0., 0., 0., 0.),
(0., 0., 0., 0.)))
را ones
روش
به طور مشابه، شما می توانید آرایه های یک بعدی و دو بعدی از همه آنها را با استفاده از ones
روش به شرح زیر است:
ones = np.ones(5)
array((1., 1., 1., 1., 1.))
و دوباره، برای آرایه دو بعدی، کد زیر را امتحان کنید:
ones = np.ones((5, 4))
حالا اگر شما print را ones
آرایه روی روی صفحه، باید آرایه دو بعدی زیر را ببینید:
((1. 1. 1. 1.)
(1. 1. 1. 1.)
(1. 1. 1. 1.)
(1. 1. 1. 1.)
(1. 1. 1. 1.))
را linspace
روش
یکی دیگر از روش های بسیار مفید برای ایجاد آرایه های NumPy این است linspace
روش. این روش سه آرگومان می گیرد: یک شاخص شروع، شاخص پایان و تعداد اعداد با فاصله خطی که بین محدوده مشخص شده می خواهید. به عنوان مثال، اگر اولین شاخص 1، آخرین شاخص 10 باشد و به 10 عنصر با فاصله مساوی در این محدوده نیاز دارید، می توانید از linspace
روش به شرح زیر است:
lin = np.linspace(1, 10, 10)
خروجی اعداد صحیح از 1 تا 10 را برمی گرداند:
array((1., 2., 3., 4., 5., 6., 7., 8., 9., 10.))
حالا بیایید سعی کنیم یک آرایه با 20 عنصر با فاصله خطی بین 1 تا 10 ایجاد کنیم. اسکریپت زیر را اجرا کنید:
lin = np.linspace(1, 10, 20)
این منجر به آرایه زیر می شود:
array(( 1. , 1.47368421, 1.94736842, 2.42105263, 2.89473684,
3.36842105, 3.84210526, 4.31578947, 4.78947368, 5.26315789,
5.73684211, 6.21052632, 6.68421053, 7.15789474, 7.63157895,
8.10526316, 8.57894737, 9.05263158, 9.52631579, 10. ))
توجه داشته باشید که خروجی ممکن است شبیه یک ماتریس باشد، اما در واقع یک آرایه یک بعدی است. به دلیل مشکل فاصله، عناصر در چندین خط نمایش داده شده اند.
را eye
روش
را eye
روش را می توان برای ایجاد یک ماتریس هویت، که می تواند برای انجام انواع عملیات در جبر خطی بسیار مفید باشد. ماتریس هویت، ماتریسی است که در بین سطرها و ستونها به جز قطر، صفر دارد. مقادیر مورب همه یک هستند. بیایید یک ماتریس هویت 4×4 با استفاده از eye
روش:
idn = np.eye(4)
ماتریس حاصل به شکل زیر است:
array(((1., 0., 0., 0.),
(0., 1., 0., 0.),
(0., 0., 1., 0.),
(0., 0., 0., 1.)))
را random
روش
اغلب اوقات شما نیاز به ایجاد آرایه با اعداد تصادفی دارید. می توانید استفاده کنید rand
عملکرد NumPy random
ماژول برای انجام این کار در اینجا یک مثال ساده از rand
تابع:
random = np.random.rand(2, 3)
اسکریپت فوق ماتریسی از 2 سطر و 3 ستون را برمی گرداند. ماتریس شامل توزیع یکنواخت اعداد بین 0 و 1 است:
array(((0.26818562, 0.65506793, 0.50035001),
(0.527117 , 0.445688 , 0.99661 )))
به طور مشابه، برای ایجاد یک ماتریس از اعداد تصادفی با توزیع گاوسی (یا توزیع “عادی”)، در عوض می توانید از آن استفاده کنید randn
روشی که در زیر نشان داده شده است:
random = np.random.randn(2, 3)
در نهایت، برای ایجاد یک آرایه از اعداد صحیح تصادفی، randint
روش برای چنین موردی وجود دارد. را randint
متد کران پایین، کران بالا و تعداد اعداد صحیح را می گیرد. به عنوان مثال، اگر می خواهید یک آرایه از 5 عدد صحیح تصادفی بین 50 تا 100 ایجاد کنید، می توانید از این روش به صورت زیر استفاده کنید:
random = np.random.randint(50, 100, 5)
در مورد ما، خروجی به این صورت بود:
array((54, 59, 84, 62, 74))
ذکر این نکته ضروری است که هر بار که متد را فراخوانی می کنید این اعداد به صورت تصادفی تولید می شوند، بنابراین اعداد متفاوتی نسبت به مثال ما خواهید دید.
ما راه های مختلفی برای ایجاد آرایه های پایتون دیدیم. اکنون برخی از دیگر توابع آرایه را بررسی می کنیم.
تغییر شکل آرایه NumPy
با استفاده از NumPy می توانید یک آرایه یک بعدی را به یک آرایه دو بعدی با استفاده از reshape
روش.
بیایید ابتدا یک آرایه از 16 عنصر با استفاده از arange
تابع. کد زیر را اجرا کنید:
nums = np.arange(1, 17)
را nums
آرایه یک آرایه تک بعدی از 16 عنصر است که از 1 تا 16 متغیر است:
array(( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))
خیر، بیایید آن را به یک آرایه دو بعدی از 4 ردیف و 4 ستون تبدیل کنیم:
nums2 = nums.reshape(4, 4)
آرایه اکنون به شکل زیر است:
array((( 1, 2, 3, 4),
( 5, 6, 7, 8),
( 9, 10, 11, 12),
(13, 14, 15, 16)))
لازم به ذکر است که اگر تعداد عناصر آرایه یک بعدی با حاصل ضرب سطرها و ستون های آرایه تغییر شکل داده شده برابر نباشد، نمی توانید یک آرایه را تغییر شکل دهید. به عنوان مثال، اگر 45 عنصر در یک آرایه 1 بعدی دارید، نمی توانید آن را به یک ماتریس 5 سطر و 10 ستون تغییر شکل دهید زیرا یک ماتریس 5×10 50 عنصر دارد و ماتریس اصلی فقط 45 عنصر دارد.
یافتن مقادیر حداکثر/حداقل
شما می توانید استفاده کنید min
/max
توابع برای یافتن آسان مقدار کوچکترین و بزرگترین عدد در آرایه خود. برای مثال، اجازه دهید ابتدا یک آرایه از 5 عدد صحیح تصادفی ایجاد کنیم:
random = np.random.randint(1, 100, 5)
print(random)
آرایه اعداد صحیح تصادفی ما به شکل زیر است:
(51 40 84 38 1)
به یاد داشته باشید، این اعداد به صورت تصادفی تولید می شوند، بنابراین به احتمال زیاد مجموعه متفاوتی از اعداد خواهید داشت. استفاده کنیم min
و max
توابع برای یافتن مقادیر حداقل و حداکثر از آرایه ای که به تازگی ایجاد کردیم. برای این کار کد زیر را اجرا کنید تا حداقل مقدار را پیدا کنید:
xmin = random.min()
print(xmin)
“1” در خروجی چاپ خواهد شد.
به طور مشابه، برای حداکثر مقدار، کد زیر را اجرا کنید:
xmax = random.max()
print(xmax)
اسکریپت فوق “84” را به عنوان خروجی برمی گرداند.
شما همچنین می توانید پیدا کنید فهرست مطالب از حداکثر و حداقل مقادیر با استفاده از argmax()
و argmin()
کارکرد. به اسکریپت زیر دقت کنید:
print(random.argmax())
اسکریپت بالا خواهد بود print “2” از 84 بزرگترین عدد در لیست است و در موقعیت دوم آرایه قرار دارد.
به طور مشابه، argmin()
“4” را برمی گرداند زیرا 1 کوچکترین عدد است و در موقعیت 4 قرار دارد.
نمایه سازی آرایه در NumPy
برای استفاده موثر از آرایه های NumPy، درک روش نمایه سازی آرایه ها بسیار مهم است که در چند بخش بعدی به آن خواهم پرداخت.
نمایه سازی با آرایه های 1 بعدی
بیایید یک آرایه ساده از 15 عدد ایجاد کنیم:
nums = np.arange(1, 16)
شما می توانید هر عنصر را با عبور دادن شماره فهرست بازیابی کنید. درست مانند لیست های پایتون، آرایه های NumPy دارای شاخص صفر هستند. به عنوان مثال، برای یافتن عنصر در اندیس دوم (موقعیت سوم) آرایه، می توانید از نحو زیر استفاده کنید:
print(nums(2))
در نمایه دوم رقم 3 را داریم، بنابراین چاپ می شود روی صفحه نمایش
شما همچنین می توانید print طیف وسیعی از اعداد با استفاده از نمایه سازی برای بدست آوردن محدوده، باید شاخص شروع و یک کمتر از اندیس پایان را که با یک دو نقطه از هم جدا شده اند، در داخل براکت های مربعی که از نام آرایه پیروی می کنند عبور دهید. به عنوان مثال، برای به دست آوردن عناصر از شاخص اول تا هفتم، می توانید از نحو زیر استفاده کنید:
print(nums(1:8))
اسکریپت بالا خواهد بود print اعداد صحیح از 2 تا 8:
(2 3 4 5 6 7 8)
اینجا در nums
آرایه، ما 2 در شاخص 1 و 8 در شاخص هفت داریم.
همچنین می توانید یک آرایه را برش دهید و عناصر آرایه برش خورده را به یک آرایه جدید اختصاص دهید:
nums2 = nums(0:8)
print(nums2)
در اسکریپت بالا ما آن را برش دادیم nums
آرایه با استخراج 8 عنصر اول آن. عناصر حاصل به nums2
آرایه. سپس ما print را nums2
آرایه به console. خروجی یک آرایه جدید از 8 عدد اول است:
(1 2 3 4 5 6 7 8)
نمایه سازی با آرایه های دو بعدی
نمایه سازی یک آرایه NumPy دو بعدی بسیار شبیه به نمایه سازی یک ماتریس است. بیایید ابتدا یک آرایه NumPy دو بعدی 3×3 ایجاد کنیم. برای این کار کد زیر را اجرا کنید:
nums2d = np.array(((1,2,3),(4,5,6),(7,8,9)))
حالا وقته print آن را بیرون آورد:
print(nums2d)
((1 2 3)
(4 5 6)
(7 8 9))
مانند آرایه های 1 بعدی، آرایه های NumPy با دو بعدی نیز از شاخص مبتنی بر صفر پیروی می کنند، یعنی برای دسترسی به عناصر موجود در اولین ردیف، شما باید 0 را به عنوان شاخص ردیف مشخص کنید. به طور مشابه برای دسترسی به عناصر در ستون اول، باید 0 را برای نمایه ستون نیز مشخص کنید.
بیایید یک عنصر را از nums2d
آرایه ای که در سطر اول و ستون اول قرار دارد:
print(nums2d(0, 0))
“1” را در خروجی مشاهده خواهید کرد. به طور مشابه، می توانیم عنصر را در ردیف سوم و ستون سوم به صورت زیر بازیابی کنیم:
print(nums2d(2, 2))
“9” را در خروجی خواهید دید.
علاوه بر استخراج یک عنصر، می توانید کل سطر را تنها با گذاشتن اندیس ردیف به براکت ها استخراج کنید. برای مثال، اسکریپت زیر اولین سطر را از nums2d
آرایه:
print(nums2d(0))
خروجی فقط یک آرایه یک بعدی است:
(1 2 3)
به طور مشابه برای بازیابی تنها ستون اول، می توانید از نحو زیر استفاده کنید:
print(nums2d(:,0))
خروجی دوباره یک آرایه است، اما ترکیبی از اولین عناصر هر آرایه از آرایه دو بعدی است:
(1 4 7)
در نهایت، برای بازیابی عناصر از دو سطر اول و دو ستون اول، می توان از نحو زیر استفاده کرد:
print(nums2d(:2,:2))
اسکریپت بالا خروجی زیر را برمی گرداند:
((1 2)
(4 5))
عملیات حسابی با آرایه های NumPy
برای مثال های این بخش، از nums
آرایه ای که در قسمت آخر ایجاد کردیم.
بیایید ابتدا دو آرایه را با هم اضافه کنیم:
nums3 = nums + nums
می توانید دو آرایه با ابعاد یکسان را به هم اضافه کنید. به عنوان مثال، nums
آرایه شامل 15 عنصر است، بنابراین می توانیم آن را به خودش اضافه کنیم. عناصر موجود در نمایه های مربوطه اضافه خواهند شد. حالا اگر شما print را nums3
آرایه، خروجی به صورت زیر است:
( 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30)
همانطور که می بینید، هر موقعیت مجموع 2 عنصر در آن موقعیت در آرایه های اصلی است.
اگر یک آرایه با مقدار اسکالر اضافه کنید، مقدار به آن اضافه می شود هر عنصر در آرایه بیایید 10 را به آن اضافه کنیم nums
آرایه و print آرایه حاصل روی را console. در اینجا این است که چگونه این کار را انجام می دهید:
nums3 = nums + 10
print(nums3)
و حاصل آن nums3
آرایه می شود:
(11 12 13 14 15 16 17 18 19 20 21 22 23 24 25)
تفریق، جمع، ضرب و تقسیم را می توان به همین ترتیب انجام داد.
به غیر از محاسبات ساده، می توانید توابع پیچیده تری را اجرا کنید روی آرایه های NumPy، به عنوان مثال ورود، مربع root، نمایی و غیره
را log
تابع
کد زیر به سادگی یک آرایه را با گزارش تمام عناصر در آرایه ورودی برمی گرداند:
nums3 = np.log(nums)
print(nums3)
خروجی به شکل زیر است:
(0. 0.69314718 1.09861229 1.38629436 1.60943791 1.79175947
1.94591015 2.07944154 2.19722458 2.30258509 2.39789527 2.48490665
2.56494936 2.63905733 2.7080502 )
را exp
تابع
اسکریپت زیر یک آرایه با نماهای همه عناصر در آرایه ورودی برمی گرداند:
nums3 = np.exp(nums)
print(nums3)
(2.71828183e+00 7.38905610e+00 2.00855369e+01 5.45981500e+01
1.48413159e+02 4.03428793e+02 1.09663316e+03 2.98095799e+03
8.10308393e+03 2.20264658e+04 5.98741417e+04 1.62754791e+05
4.42413392e+05 1.20260428e+06 3.26901737e+06)
را sqrt
تابع
اسکریپت زیر آرایه ای را با ریشه های مربع تمام عناصر موجود در آرایه ورودی برمی گرداند:
nums3 = np.sqrt(nums)
print(nums3)
(1. 1.41421356 1.73205081 2. 2.23606798 2.44948974
2.64575131 2.82842712 3. 3.16227766 3.31662479 3.46410162
3.60555128 3.74165739 3.87298335)
را sin
تابع
اسکریپت زیر یک آرایه با سینوس تمام عناصر آرایه ورودی برمی گرداند:
nums3 = np.sin(nums)
print(nums3)
( 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427 -0.2794155
0.6569866 0.98935825 0.41211849 -0.54402111 -0.99999021 -0.53657292
0.42016704 0.99060736 0.65028784)
عملیات جبر خطی با آرایه های NumPy
یکی از بزرگترین مزیتهای آرایههای NumPy، توانایی آنها در انجام عملیات جبر خطی، مانند حاصلضرب نقطه برداری و حاصلضرب نقطه ماتریس، بسیار سریعتر از آن چیزی است که با لیستهای پیشفرض پایتون میتوانید انجام دهید.
یافتن محصول نقطه برداری
محاسبه بردار محصول نقطه ای برای دو بردار را می توان با ضرب عناصر متناظر دو بردار و سپس جمع کردن نتایج حاصل از محصولات محاسبه کرد.
بیایید دو بردار ایجاد کنیم و سعی کنیم محصول نقطه آنها را به صورت دستی پیدا کنیم. یک بردار در NumPy اساساً فقط یک آرایه 1 بعدی است. اسکریپت زیر را برای ایجاد وکتورهای ما اجرا کنید:
x = np.array((2,4))
y = np.array((1,3))
حاصلضرب نقطه ای دو بردار فوق می باشد (2 x 1) + (4 x 3) = 14
.
بیایید محصول نقطه را بدون استفاده از کتابخانه NumPy پیدا کنیم. برای این کار اسکریپت زیر را اجرا کنید:
dot_product = 0
for a,b in zip(x,y):
dot_product += a * b
print(dot_product)
در اسکریپت بالا، ما به سادگی عناصر مربوطه را در آن حلقه زدیم x
و y
بردارها را ضرب کرد و به جمع قبلی اضافه کرد. اگر اسکریپت بالا را اجرا کنید، “14” را خواهید دید که در آن چاپ شده است console.
حال، بیایید ببینیم چگونه میتوانیم محصول نقطهای را با استفاده از کتابخانه NumPy پیدا کنیم. به اسکریپت زیر نگاه کنید:
a = x * y
print(a.sum())
می دانیم که اگر دو آرایه NumPy را ضرب کنیم، عناصر مربوطه از هر دو آرایه بر اساس ضرب می شوند. روی شاخص آنها در اسکریپت بالا، به سادگی عدد را ضرب کردیم x
و y
بردارها سپس ما تماس می گیریم sum
روش روی آرایه حاصل که تمام عناصر آرایه را جمع می کند. اسکریپت فوق نیز “14” را در خروجی برمی گرداند.
روش فوق ساده است، با این حال، کتابخانه NumPy پیدا کردن محصول نقطه را از طریق dot
روش، همانطور که در اینجا نشان داده شده است:
print(x.dot(y))
برای آرایههای بسیار بزرگ، به لطف استفاده NumPy از کد C برای پیادهسازی بسیاری از توابع اصلی و ساختارهای داده، باید نسبت به نسخه فقط پایتون ما شاهد بهبود سرعت نیز باشید.
ضرب ماتریس
مانند حاصل ضرب نقطه ای دو بردار، می توانید دو ماتریس را نیز ضرب کنید. در NumPy، یک ماتریس چیزی بیش از یک آرایه دو بعدی نیست. برای ضرب دو ماتریس، ابعاد داخلی ماتریس ها باید مطابقت داشته باشند، به این معنی که تعداد ستون های ماتریس روی سمت چپ باید برابر با تعداد ردیف های ماتریس باشد روی سمت راست محصول به عنوان مثال، اگر ماتریس X دارای ابعاد (3،4) و ماتریس Y دیگر دارای ابعاد (4،2) باشد، ماتریس های X و Y را می توان با هم ضرب کرد. ماتریس حاصل دارای ابعاد (3،2) خواهد بود که اندازه ابعاد بیرونی است.
برای ضرب دو ماتریس، dot
تابع را می توان مطابق شکل زیر استفاده کرد:
X = np.array(((1,2,3), (4,5,6)))
Y = np.array(((1,2), (4,5), (7,8)))
Z = np.dot(X, Y)
print(Z)
در اسکریپت بالا یک ماتریس 3×2 با نام ایجاد کردیم X
و یک ماتریس 2×3 به نام Y
. سپس حاصل ضرب نقطه ای دو ماتریس را پیدا کرده و ماتریس حاصل را به متغیر اختصاص می دهیم Z
. بالاخره ما print ماتریس حاصل به console. در خروجی باید یک ماتریس 2×2 را مطابق شکل زیر مشاهده کنید:
((30 36)
(66 81))
همچنین می توانید دو ماتریس را از نظر عنصر ضرب کنید. برای انجام این کار، ابعاد دو ماتریس باید مطابقت داشته باشند، درست مانند زمانی که آرایه ها را با هم اضافه می کردیم. را multiply
تابع برای ضرب عنصر استفاده می شود.
بیایید سعی کنیم ماتریس ها را ضرب کنیم X
و Y
از نظر عنصر:
Z = np.multiply(X, Y)
هنگام اجرای کد بالا، خطای زیر رخ می دهد:
ValueError: operands could not be broadcast together with shapes (2,3) (3,2)
خطا به دلیل عدم تطابق بین ابعاد رخ می دهد X
و Y
ماتریس ها حالا بیایید ضرب را امتحان کنیم X
ماتریس با خود با استفاده از multiply
تابع:
Z = np.multiply(X, X)
حالا اگر شما print را Z
ماتریس، شما باید نتیجه زیر را ببینید:
(( 1 4 9)
(16 25 36))
را X
ماتریس با موفقیت توانست با خودش ضرب کند زیرا ابعاد ماتریس های ضرب شده مطابقت داشتند.
پیدا کردن معکوس یک ماتریس
یکی دیگر از عملیات بسیار مفید ماتریس، یافتن معکوس یک ماتریس است. کتابخانه NumPy شامل ìnv
عملکرد در linalg
مدول.
برای مثال، اجازه دهید معکوس یک ماتریس 2×2 را پیدا کنیم. به کد زیر دقت کنید:
Y = np.array(((1,2), (3,4)))
Z = np.linalg.inv(Y)
print(Z)
خروجی کد بالا به شکل زیر است:
((-2. 1. )
( 1.5 -0.5))
حال برای بررسی اینکه آیا معکوس به درستی محاسبه شده است، می توانیم حاصل ضرب نقطه ای یک ماتریس را با معکوس آن بگیریم که باید یک ماتریس هویت به دست آورد.
W = Y.dot(Z)
print(W)
((1.00000000e+00 1.11022302e-16)
(0.00000000e+00 1.00000000e+00))
و نتیجه همان شد که انتظار داشتیم. یکی در مورب و صفر (یا خیلی نزدیک به صفر) در جای دیگر.
پیدا کردن تعیین کننده یک ماتریس
را تعیین کننده یک ماتریس را می توان با استفاده از det
روشی که در اینجا نشان داده شده است:
X = np.array(((1,2,3), (4,5,6), (7,8,9)))
Z = np.linalg.det(X)
print(Z)
در اسکریپت بالا، یک ماتریس 3×3 ایجاد کردیم و تعیین کننده آن را با استفاده از det
روش. در خروجی باید “6.66133814775094e-16” را مشاهده کنید.
یافتن ردی از یک ماتریس
ردیابی یک ماتریس مجموع تمام عناصر موجود در قطر یک ماتریس است. کتابخانه NumPy شامل یک trace
تابعی که می تواند برای یافتن ردی از یک ماتریس استفاده شود. به مثال زیر نگاه کنید:
X = np.array(((1,2,3), (4,5,6), (7,8,9)))
Z = np.trace(X)
print(Z)
در خروجی، باید “15” را ببینید، زیرا مجموع عناصر مورب ماتریس است X
است 1 + 5 + 9 = 15
.
نتیجه
کتابخانه NumPy پایتون یکی از محبوب ترین کتابخانه ها برای محاسبات عددی است. در این مقاله کتابخانه NumPy را با کمک چندین مثال به تفصیل بررسی کردیم. ما همچنین نشان دادیم که چگونه عملیات جبر خطی مختلف را از طریق کتابخانه NumPy انجام دهیم، که معمولاً در بسیاری از برنامه های علوم داده استفاده می شود.
در حالی که ما مقدار زیادی از عملکرد اصلی NumPy را پوشش دادیم، هنوز چیزهای زیادی برای یادگیری وجود دارد. دوره های زیادی در آنجا وجود دارد که NumPy، Pandas، Scikit-Learn، و Matplotlib را بسیار عمیق تر از آنچه ما در اینجا پوشش می دهیم، پوشش می دهند. پیشنهاد میکنم به وبسایت دورههای محبوب یا حتی YouTube نگاهی بیندازید، و احتمالاً یک منبع خوب پیدا خواهید کرد.
پیشنهاد می کنم نمونه های این مقاله را تمرین کنید. اگر قصد دارید به عنوان یک دانشمند داده شغلی را شروع کنید، کتابخانه NumPy قطعا یکی از ابزارهایی است که باید برای یادگیری آن نیاز داشته باشید تا عضوی موفق و سازنده در این زمینه باشید.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-27 04:42:06