چطوری اجرای حلقه‌هامون رو توی متلب سریع‌تر کنیم

استاندارد

همونطور که میدونید زبان متلب جوری طراحی شده که برای عملیات روی ماتریس‌ها و بردارها به شدت کارامد باشه ، ولی‌ بر خلاف کار آمدی توی این زمینه، متلب توی for-loop اصلا خوب عمل نمیکه و باعث میشه تو موقع اجرای کدهاتون (مخصوصا اونها که تعداد حلقه‌های به نسبت زیادی دارن) کلافه بشین .

حالا چیکار کنیم که انجام حلقه‌هامون رو توی متلب سریع تر کنیم ؟ این کار رو میتونیم به کمک Vectorization انجام بدیم . Vectorization به تبدیل عملیات‌های که به صورت تک تک انجام میشن ( مثلا یه حلقه ۱۰۰۰ تای که باید body حلقمون ۱۰۰۰ بار به صورت تک تک انجام بشه) به عملیات‌های که به واسطه بردارها انجام میشن گفته میشه .

 

حالا بریم سر مثال ، کد زیر رو در نظر بگیرید :

همون کد رو میتونیم به صورت Vectorization شده دربیاریم، به شکل زیر :

یا مثلا دو ماتریس A و B  رو در نظر بگیرید که هم اندازه اند ، برای ضرب کردن درایه به درایه این دو ماتریس دو راه حل وجود داره .
راه اول با حلقه for :

راه دوم با Vectorization :

عملگر point (نقطه) توی کد بالا باعث میشه عملیات ضرب روی تک تک درایه‌های ماتریس‌هامون انجام بشه . از این عملگر برای vectorize کردن دیگر عملگرها هم میشه استفاده کرد، مثل ^(توان) یا / (تقسیم) .

کد زیر و در نظر بگیرید

حالا همون کد که با عملگر point (نقطه) vectorize شده :

 

اگه دوستداشتد هم میتونید با قرار دادن ;tic در اول کدتون و ;toc تو اخر کدتون پیادسازی‌ها با دو روش Vectorization و غیر Vectorization رو از نطر زمانی باهم مقایسه کنید .