کتابخانه نامپای (Numpy Library) چیست؟ چه کاربردهایی دارد؟ چه ویژگیهایی دارد؟ و چرا باید آن را یاد گرفت؟
کتابخانه نامپای از مهمترین و کاربردیترین کتابخانههای زبان برنامهنویسی پایتون است. یکی از ویژگیهایی که پایتون را زبان کاربردی، قدرتمند و پرطرفداری میکند، داشتن کتابخانههای مختلف است. پایتون زبانی بسیار کاربردی است. از پایتون حتی میشود در طراحی سایت هم کمک گرفت. اما مهمترین کاربرد پایتون در هوش مصنوعی و ماشین لرنینگ است.
اساسا پایتون زبانی است برای جمعآوری و تحلیل دادهها. به همین دلیل، گرچه زبانهای برنامهنویسی قدرتمند دیگری (مثل زبان R) هم برای جمعآوری و تحلیل داده وجود دارد، پایتون اولین انتخاب در پروژههای ماشین لرنینگ است. یکی از دلایل آن اولویت داشتن وجود کتابخانهای به نام نامپای در پایتون است.
در این محتوا با کتابخانهی نامپای آشنا میشوید و پاسخ سوالات طرح شده در ابتدا را میخوانید.
زبان برنامهنویسی R از زبانهای برنامهنویسی تخصصی است که برای تحلیل داده و محاسبات آماری استفاده میشود. اگر میخواهید بدانید پایتون و R چه شباهتها و تفاوتهایی دارند، مقالهی «مقایسه جامع زبانهای برنامهنویسی پایتون و R» را بخوانید.
آنچه در این نوشته خواهیم داشت
معرفی کتابخانه نامپای (Numpy) در پایتون
قبل از معرفی نامپای باید کمی دربارهی ماشین لرنینگ و فرآیندهای آن توضیح داده شود. انسان میتواند با استفاده از دادهها و ساختن الگوریتمها به یک سیستم (ماشین) آموزش دهد تا کار مشخصی را انجام دهد. در ماشین لرنینگ با تحلیل داده مدل یا الگوریتمی ساخته میشود. یعنی برای ماشین مشخص میشود که دادهها را بگیرد، براساس مراحل یا فرآیندهایی معلوم دستهبندی و تحلیل کند و نتیجه را به عنوان خروجی تحویل دهد.
برای مثال، متخصصان پردازش زبان طبیعی به دستیارهای صوتی (مثل Siri) یاد دادهاند که زبان انسان را بفهمد و به او جواب دهد. یعنی الگوریتمهایی (مدلهایی) ساختند که حجم عظیمی از کلمات و جملات را بگیرد، دستهبندی (ساختارمند و نظاممند) کند تا بتواند آنها را بفهمد و در نهایت پاسخ (خروجی) مناسب دهد.
ناگفته پیداست که مدل باید حجم عظیمی از داده را تحلیل و ساختارمند کند. در زبان برنامهنویسی پایتون برای دستهبندی و ساختارمند کردن دادهها از آرایهها (Arrays) استفاده میشود. آرایهها درواقع ظرفهایی هستند برای دستهبندی و ذخیره کردن دادهها. در پایتون دو نوع آرایه وجود دارد: single-dimensional و multi-dimensional. یک آرایه در پایتون به شکل زیر نوشته میشود.
variable_name = array(typecode,[elements])
آرایه در نامپای به شکل زیر نوشته میشود.
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr) print(type(arr))
وقتی دادهها منظم شدند، راحتتر محاسبات و تحلیل انجام میشود. درواقع، آرایهها هستند که تحلیل میشوند یا اگر لازم باشد روی آرایهها یا itemهای آرایهها محاسبات ریاضی انجام میشود. اما نکته اینجاست که در خود پایتون نمیشود روی آرایههای چندبعدی و ماتریسها جز محاسبات سادهی ریاضی را انجام داد. کتابخانهای مخصوص، نامپای، برای آن نوع محاسبات ساخته شده است.
کلمهی نامپای از ترکیب شدن دو کلمه به وجود آمده است: Numeric و Python یا Numeric Python (پایتون عددی). نامپای کتابخانهای است بسیار قدرتمند با کارایی بالا که به برنامهنویس امکان میدهد انواع آرایهها و itemهای آنها را مدیریت و دستکاری کند یا روی آنها محاسبات پیچیدهی ریاضی و منطقی انجام دهد.
پایتون کتابخانه بسیار معروف دیگری دارد به نام Pandas. پانداس کتابخانه قدرتمندی در علم داده است. «Pandas، ابزاری برای مدیریت داده» را بخوانید تا بیشتر با این کتابخانه آشنا شوید.
ویژگیهای کتابخانه نامپای برای ماشین لرنینگ
همانطور که اشاره شد، یادگیری ماشین بدون تحلیل حجم عظیمی از دادهها ممکن نیست. البته، در هر پروژهی یادگیری ماشین دادهها و در نتیجه نوع تحلیل آنها متفاوت است. در همهی پروژهها قرار نیست محاسبات علمی و ریاضی پیچیدهای صورت بگیرد. به همین دلیل، پایتون کتابخانههای مختلفی برای تجزیه و تحلیل دادهها دارد. پس، باید به این سوال مهم پاسخ داد که چه چیز نامپای را از دیگر کتابخانهها متمایز میکند؟
۱. نامپای محاسبات جبر خطی را بهینه و سریع میکند
Numpy برای محاسبات علمی و ریاضی است. یعنی اگر برای تحلیل دادههای عددی نیاز باشد محاسبات ریاضی انجام شود، نامپای بهترین گزینه است. با نامپای میشود محاسبات جبر خطی (linear Algebra) را در کوتاهترین زمان انجام داد. جبر خطی شاخهای از ریاضیات است که در آن ماتریسها و بردارها (vector) و فضاهای برداری مطالعه میشود.
جبر خطی در علوم مختلف (از جمله فیزیک، شاخههای گوناگون مهندسی، علوم طبیعی و هوش مصنوعی) کاربرد دارد. محاسبات جبر خطی (ماتریسها و بردارها) امکان مدلسازی تقریبا هر چیزی را، از جمله پدیدههای طبیعی، ممکن میکند. آن قابلیت دقیقا همان چیزی است که جبر خطی را برای هوش مصنوعی و ماشین لرنینگ کاربردی کرده است. در نامپای و با آرایههای نامپای میشود ماتریس و بردار ساخت و محاسبات و عملیات ریاضی مختلف را روی itemهای یک آرایه یا بعضی از آنها انجام داد.
قطعه کد زیر به ترتیب نمونهای از ساختن یک ماتریس با آرایهی نامپای و محاسبات جبر خطی با آرایهها است.
>>> from numpy.random import rand >>> from numpy.linalg import solve, inv >>> a = np.array([[1, 2, 3], [3, 4, 6.7], [5, 9.0, 5]]) >>> a.transpose() array([[ 1. , 3. , 5. ], [ 2. , 4. , 9. ], [ 3. , 6.7, 5. ]]) >>> inv(a) array([[-2.27683616, 0.96045198, 0.07909605], [ 1.04519774, -0.56497175, 0.1299435 ], [ 0.39548023, 0.05649718, -0.11299435]]) >>> b = np.array([3, 2, 1]) >>> solve(a, b) # solve the equation ax = b array([-4.83050847, 2.13559322, 1.18644068]) >>> c = rand(3, 3) * 20 # create a 3x3 random matrix of values within [0,1] scaled by 20 >>> c array([[ 3.98732789, 2.47702609, 4.71167924], [ 9.24410671, 5.5240412 , 10.6468792 ], [ 10.38136661, 8.44968437, 15.17639591]]) >>> np.dot(a, c) # matrix multiplication array([[ 53.61964114, 38.8741616 , 71.53462537], [ 118.4935668 , 86.14012835, 158.40440712], [ 155.04043289, 104.3499231 , 195.26228855]]) >>> a @ c # Starting with Python 3.5 and NumPy 1.10 array([[ 53.61964114, 38.8741616 , 71.53462537], [ 118.4935668 , 86.14012835, 158.40440712], [ 155.04043289, 104.3499231 , 195.26228855]])
۲. نامپای با دیگر زبانهای برنامهنویسی و کتابخانههای پایتون سازگار است
مورد اول است که نامپای را به کتابخانهای لازم برای ماشین لرنینگ تبدیل میکند. یعنی مهندس ماشین لرنینگ میتواند با نامپای همه نوع محاسبات جبر خطی را برای تجزیه و تحلیل دادهها به کار گیرد. آرایههای نامپای از آرایههای ساخته شده در پایتون سریعتر و بهینهتر عمل میکنند. چون عملیات ریاضی با آرایههای نامپای سادهتر میشود.
علاوه بر ویژگیهایی که مربوط به محاسبات علمی و ریاضی است، کتابخانه نامپای و آرایههای آن با دیگر زبانهای برنامهنویسی از جمله C++ & C سازگارند. یعنی میشود در آرایههای نامپای زبانهای دیگر را ادغام کرد. درواقع، نامپای به توسعهدهنده و برنامهنویس اجازه میدهد تا از امکانات و قدرت محاسباتی زبانهایی مانند C در پایتون استفاده کنند.
Numpy را چه کسی و در چه سالی ساخت؟
در سال ۱۹۹۵ برنامهنویسی به نام Jim Hugunin با همکاری چند توسعهدهندهی دیگر کتابخانه Numeric را ساخت. در سال ۲۰۰۵، Travis Oliphant، دیتا ساینتیست و تاجر معروف آمریکایی، نامپای را با ادغام کردن Numeric با Numarray (که مجموعهای از پلاگینها برای پایتون بود) و ارتقا دادن قابلیتهای آن دو به بازار عرضه کرد. نامپای جایگزین کتابخانهی Numeric شد. نامپای متن باز و رایگان است و گروهی از برنامهنویسان و توسعهدهندگان با همکاری یکدیگر آن را پشتیبانی و بهروزرسانی میکنند.
جمعبندی و نتیجهگیری
۱. نامپای در پایتون کتابخانهای است برای محاسبات علمی و ریاضی. یعنی کتابخانهای است کاملا عددی.
۲. ماشین لرنینگ کاربردهای بسیار وسیعی دارد. اما تجزیه و تحلیل دادهها بخش جدانشدنی از همهی پروژههای ماشین لرنینگ است. اگر قرار باشد در پروژهای (مثلا ساختن مدلی برای پیشبینی فعالیت یک آتشفشان) برای تحلیل داده از محاسبات ریاضی استفاده شود، نامپای بهترین گزینه است.
۳. برای یاد گرفتن نامپای اول باید پایتون را یاد گرفت. برای گذراندن آموزش ماشین لرنینگ هم نیاز است اول پایتون را یاد گرفت.
۴. بعد از تسلط بر پایتون و مباحث یادگیری ماشین، با کمک گرفتن از منابع آموزشی آنلاین (مانند w3schools.com) میشود بر کار با کتابخانهی نامپای مسلط شد.