این روزها زبان برنامه نویسی پایتون خیلی سر زبون ها افتاده. هر کی به یه دلیلی می خواد پایتون رو یاد بگیره؛ خب ما مهندس های مکانیک هم دل داریم دیگه! چی می شد می تونستیم یه زبان برنامه نویسی رو در فرصت کم و با کمترین سردرگمی و پیچیدگی یاد بگیریم که بتونه مسائل زمان بر و چند بعدی ما رو با سرعت بالا حل کنه و نمودارهامون رو رسم کنه یا دیتاست های حجیمی که از تست های مختلف استخراج کردیم هندل کنه؟ یعنی کی میشه دیگه ناز اکسل و میپل رو نکشیم؟
خب پایتون برای ما مهندس های مکانیک هم راهکار داره. حتی بعضیا ادعا میکنن اگر خوب اسکریپتش رو بنویسی، متلب رو هم میذاره توی جیبش (اون طوری نگام نکن! نباید روی نرم افزاری تعصب داشته باشی؛ حتی متلب). همه این کارها رو به نظرم مدیون کتابخانه های متنوع و منعطف پایتون هستیم که من میخوام چندتاشون رو توی این قسمت بهتون معرفی کنم. البته فعلا خیلی مختصر بهشون اشاره می کنم که هر چی بلدم رو خرج یه پست نکنم و بتونم سر همین موضوع یه چندتایی مطلب براتون بنویسم :)
اگر از مقدمات پایتون یه چیزایی شنیده باشید، می دونید که یکسری از توابع و متدهای پایتون رو بدون فراخوانی هیچ ماژول و کتابخانه ای می تونید استفاده کنید. متدهای ریاضی اولیه از قبل همراه پایتون نصب میشه و جوابگوی محاسبات اولیه ریاضی شما هست؛ اما اگر محاسبات شما پیچیده تر بشه، باید ماژول استاندارد Math رو فراخوانی کنید. تفاوت این متدهای داخلی با ماژول Math عین تفاوت ماشین حساب ساده و ماشین حساب مهندسیه! کافیه شما بخواید arcsin یه مقدار رو به دست بیارید یا برعکس sin یه زاویه رو حساب کنید، یا حتی بخواید از اعداد پی یا نپر استفاده کنید. برای محاسبات لوگاریتمی، توانی، مثلثاتی و هذلولوی و محاسبات عددی طولانی مثل سری و حتی ک.م.م (یاد دبیرستان بخیر) هم می تونید از متدهای این تابع کمک بگیرید.
یه جا دیدم یه نفر اومده حساب کرده که اگر بخوایم فاکتوریل یه عدد رو بدست بیاریم چکار باید بکنیم؛ خب یه راه اینه که بر اساس تعریف فاکتوریل بیایم با forحلقه بنویسیم تا بتونیم نتیجه نهایی رو حساب کنیم. مثل کد زیر که برای فاکتوریل 7 نوشته شده:
def fact_loop(num): if num < 0: return 0 if num == 0: return 1 factorial = 1 for i in range(1, num + 1): factorial = factorial * i return factorial >>> fact_loop(7) 5040
حالا اگر ماژول Math رو وارد بازی کنیم، با متد factorial() توی یک خط کد می تونیم همون کار رو تکرار کنیم:
import math >>> math.factorial(7) 5040
می پرسی فرقش چیه: عرض به خدمت شما علاوه براینکه با یه کد تمیز طرف هستیم، باید بگم که هزینه محاسباتی رو که برای ما مهندس ها خیلی مهمه، به شدت کاهش دادیم؛ دقیقا یک دهم! محاسبه 7 فاکتوریل با حلقه for حدود 1.064 میلی ثانیه زمان برد اما با کمک ماژول Math در مدت 0.107 میلی ثانیه کار تمام شد. عالیه مگه نه؟
یادگیری این ماژول واسه ما خیلی مهمه. چون خیلی جاها مجبوریم توی محاسباتمون از مقادیر برداری استفاده کنیم یا با کلی ماتریس سر و کله بزنیم؛ ماژول Numpy برای کار روی آرایه ها و ماتریس ها ساخته شده و رقیب سرسخت متلب هست. توی این لینک می تونید ببینید چطور متلب رو به خاک و خون کشیده!
قبول دارم که متلب توی دنیای پکیج های مهندسی یه جور اسطوره قلمداد می شه. اینجا هم اسم بزرگش روی پایتون سایه انداخته و در نتیجه شاهد ماژول Matplolibهستیم؛ یعنی ماژولی که عین متلب واستون پلات میگیره! خب اگر داده هاتون رو به خاطر ویژگی های خوب پایتون و کتابخانه هاش، با پایتون تحلیل کرده باشید و محاسباتتون رو انجام داده باشید، راحت تره توی همین محیط هم گراف هاتون رو نمایش و نتایج رو نشون بدید. این ماژول هم دقیقا اینجاست که شما یک وقت توی دلتون از اینکه به خاطر پایتون به متلب پشت کردید، پشیمون نشید!
مهندس های ارتعاشات عاشق این ماژول میشن. در یک کلام Scipy الگوریتم های پردازش و محاسبات رو شامل میشه. شما اگر با پردازش سیگنال، تبدیل فوریه، رگرسیون، حل معادلات دیفرانسیل، انتگرال گیری، درونیابی و بهینه سازی سر و کار دارید، این ماژول چوب جادوی شماست. یه نکته جالب هم اینه که متدها و توابع ماژول Numpyداخل این ماژول هم موجوده!
ببینید دوستان پروژه های شما ممکنه فقط تحلیل ساده یه سری داده نباشه. ممکنه توی فضا اینترنت اشیا فعال باشید یا روی میکرو کنترلر ها کار کنید. یا شاید دارید یادگیری ماشین کار می کنید و حجم داده هاتون خیلی زیاده. خیلی راحت تره که ضمن یادگیری یک زبان برنامه نویسی واحد به اسم پایتون، با استفاده از کلی کتابخانه منعطف این زبان، به روش های مختلف داده هاتون رو جمع آوری کنید و بدون انتقال به یک پکیج ثانوی، داخل همین محیط پایتون با سرعت خیلی بیشتر اون ها رو پردازش کنید و نهایتا خروجی کارتون رو ببینید.
متن باز بودن، جامعه کاربری و پشتیبانی گسترده و ضد تحریمی بودن پایتون در کنار کتابخانه های گسترده اون دلیل های خوبی هست که به عنوان یک مهندس از پکیج های بسته ای مثل متلب (که البته هنوز محتاج سیمولینکش هستم) به پایتون نقل مکان کنید.