ورود

View Full Version : طولانی شدن زمان اجرای کد به دلیل حلقه for



mkkamrani
جمعه 16 مرداد 1394, 16:40 عصر
for i=1:296277;
[g, f]=nonu(rprim( : ,i));
f=f';
for u=f(1, : )
du(i, : )=-((rprim(u,i)-(p0(u, : )*q0( : ,i)))*(p0(u, : )))+(q0( : ,i)')
end
end
سلام
برای کاهش زمان طولانی اجرای کد بالا چه راه حلی به من پیشنهاد می کنید؟
rprim یک ماتریس با ابعاد 296277*22166 هست.
تابع nonu برای هر ستون اندیس سطرهایی که مقادیر غیر صفر دارند را مشخص می کنه.
ممنون

ehsan_faal
جمعه 16 مرداد 1394, 17:17 عصر
اصل preAllocation رو برای ماتریس du رعایت کردید؟
یعنی مثلا قبلش بگید du مساویه zeros ای با سایز نهاییه du باشه.
در ضمن توی هلپ متلب بگردید ببینید میتونید از دستوراتی مثل bsxfun و arrayfun استفاده کنید.
اگه بتونید اونوقت دیگه نیازی به استفاده از حلقه for نخواهید داشت.

mkkamrani
شنبه 17 مرداد 1394, 08:46 صبح
خیلی ممنون از راهنماییتون با استفاده از تابع zeros مشکلم حل شد