کتابخانه NumPy در پایتون
NumPy بسته اساسی برای محاسبات علمی در پایتون است. این یک کتابخانه پایتون است که یک شی آرایه چند بعدی، اشیاء مشتق شده مختلف (مانند آرایه ها و ماتریس های پوشانده شده) و مجموعه ای از روال ها برای عملیات سریع روی آرایه ها، از جمله ریاضی، منطقی، دستکاری شکل، مرتب سازی، انتخاب، I/O ارائه می کند. تبدیل فوریه گسسته، جبر خطی پایه، عملیات آماری پایه، شبیه سازی تصادفی و بسیاری موارد دیگر.
NumPy یک کتابخانه پایتون است که برای کار با آرایه ها استفاده می شود. همچنین دارای توابعی برای کار در حوزه جبر خطی، تبدیل فوریه و ماتریس ها است. NumPy در سال 2005 توسط Travis Oliphant ایجاد شد.
در هسته بسته NumPy، شی ndarray قرار دارد. این آرایههای n بعدی از انواع دادههای همگن را کپسوله میکند و بسیاری از عملیات در کد کامپایل شده برای عملکرد انجام میشوند.
چندین تفاوت مهم بین آرایه های NumPy و دنباله های استاندارد پایتون وجود دارد:
- آرایههای NumPy بر خلاف فهرستهای پایتون (که میتوانند به صورت پویا رشد کنند)، اندازه ثابتی در هنگام ایجاد دارند. تغییر اندازه یک ndarray یک آرایه جدید ایجاد می کند و اصلی را حذف می کند.
- عناصر موجود در یک آرایه NumPy باید همه از یک نوع داده باشند و بنابراین در حافظه یک اندازه خواهند بود. استثنا: میتوان آرایههایی از اشیاء (Python، از جمله NumPy) داشت، بنابراین آرایههایی از عناصر با اندازههای مختلف را امکانپذیر کرد.
- آرایه های NumPy عملیات ریاضی و سایر انواع پیشرفته را بر روی تعداد زیادی داده تسهیل می کنند. به طور معمول، چنین عملیاتی کارآمدتر و با کد کمتری نسبت به آنچه که ممکن است با استفاده از دنبالههای داخلی پایتون اجرا میشوند.
- تعداد زیادی از بسته های علمی و ریاضی مبتنی بر پایتون از آرایه های NumPy استفاده می کنند. اگرچه اینها معمولاً از ورودی دنباله پایتون پشتیبانی می کنند، اما این ورودی را قبل از پردازش به آرایه های NumPy تبدیل می کنند و اغلب آرایه های NumPy را خروجی می کنند. به عبارت دیگر، برای استفاده مؤثر از بسیاری (شاید حتی بیشتر) از نرمافزارهای علمی/ریاضی مبتنی بر پایتون امروزی، فقط دانستن نحوه استفاده از انواع توالی داخلی پایتون کافی نیست – همچنین باید بدانید که چگونه از آرایههای NumPy استفاده کنید.
کتابخانه NumPy پیتون
نکات مربوط به اندازه و سرعت دنباله به ویژه در محاسبات علمی مهم است. به عنوان یک مثال ساده، مورد ضرب هر عنصر در یک دنباله 1-D با عنصر مربوطه در دنباله دیگری به همان طول را در نظر بگیرید. اگر داده ها در دو لیست پایتون a و b ذخیره شوند، می توانیم روی هر عنصر تکرار کنیم:
این پاسخ صحیح را ایجاد می کند، اما اگر a و b هر کدام حاوی میلیون ها عدد باشند، بهای ناکارآمدی حلقه زدن در پایتون را خواهیم پرداخت. با نوشتن میتوانیم همان کار را خیلی سریعتر در C انجام دهیم (برای وضوح، از اعلانها و مقداردهی اولیه متغیرها، تخصیص حافظه و غیره غفلت میکنیم).
این باعث صرفه جویی در تمام هزینه های مربوط به تفسیر کد پایتون و دستکاری اشیاء پایتون می شود، اما به قیمت مزایایی که از کدنویسی در پایتون به دست می آید. علاوه بر این، کار کدگذاری مورد نیاز با ابعاد داده های ما افزایش می یابد. برای مثال، در مورد یک آرایه دو بعدی، کد C (مختص شده مانند قبل) به
NumPy بهترین هر دو جهان را به ما می دهد: عملیات عنصر به عنصر “حالت پیش فرض” زمانی است که یک ndarray درگیر است، اما عملیات عنصر به عنصر به سرعت توسط کد C از پیش کامپایل شده اجرا می شود. در NumPy
c = a * b
همان کاری را که نمونههای قبلی انجام میدهند، با سرعتهای نزدیک به C انجام میدهد، اما با سادگی کد ما از چیزی مبتنی بر پایتون انتظار داریم. در واقع، اصطلاح NumPy حتی ساده تر است! این مثال آخر دو ویژگی NumPy را نشان می دهد که اساس قدرت آن است: vectorization و broadcasting.
چرا NumPy سریع است؟
vectorization عدم وجود هرگونه حلقه صریح، نمایه سازی و غیره را در کد توصیف می کند – البته این چیزها فقط “پشت صحنه” در کد C بهینه سازی شده و از پیش کامپایل شده اتفاق می افتد. کد برداری دارای مزایای بسیاری است که از جمله آنها می توان به موارد زیر اشاره کرد:
- کد برداری مختصر تر و خواندن آسان تر است
- خطوط کد کمتر به طور کلی به معنای باگ های کمتر است
- کد بیشتر شبیه نمادهای ریاضی استاندارد است (معمولا کدنویسی صحیح ساختارهای ریاضی را آسان تر می کند)
- vectorization منجر به کدهای “پایتونیک” بیشتر می شود. بدون vectorization ، کد ما مملو از حلقههای ناکارآمد و خواندن آن دشوار خواهد بود.
Broadcasting اصطلاحی است که برای توصیف رفتار عنصر به عنصر ضمنی عملیات استفاده می شود. به طور کلی، در NumPy همه عملیات، نه فقط عملیات حسابی، بلکه منطقی، بیت عاقلانه، عملکردی و غیره، به این شکل ضمنی عنصر به عنصر عمل می کنند، یعنی پخش می شوند. علاوه بر این، در مثال بالا، a و b میتوانند آرایههای چندبعدی همشکل، یا یک عددی و یک آرایه، یا حتی دو آرایه با اشکال مختلف باشند، مشروط بر اینکه آرایه کوچکتر به شکل آرایه بزرگتر «قابل گسترش» باشد. به گونه ای که Broadcasting حاصل بدون ابهام باشد.
کاربرد NumPy
NumPy به طور کامل از یک رویکرد شی گرا پشتیبانی می کند و یک بار دیگر با ndarray شروع می شود. به عنوان مثال، ndarray یک کلاس است که متدها و ویژگی های متعددی دارد. بسیاری از روشهای آن توسط توابعی در بیرونیترین فضای نام NumPy منعکس میشوند و به برنامهنویس اجازه میدهند تا در هر پارادایم مورد نظر خود کدنویسی کنند. این انعطافپذیری به گویش آرایه NumPy و کلاس ndarray NumPy اجازه داده است تا به زبان واقعی مبادله دادههای چند بعدی مورد استفاده در پایتون تبدیل شوند.
برای خرید لایسنس نرم افزار Power BI ، میتوانید از خدمات ما استفاده نموده و درخواست خود را از طریق فرم زیر ثبت نمایید.