اندازه‌گیری زمان اجرای تکه‌ ‌‌کدها در پایتون

کتابخانه numpy در پایتون یکی از نیازهای اولیه هر برنامه‌نویس پایتون است، اگر کار علمی با پایتون انجام می‌دهید یا با اعداد ارقال سروکار دارید، زندگی بدون numpy جهنم است.
مثل اکثر مطالب دیگر بلاگ که پاراگراف اول چندان به موضوع اصلی نوشته ارتباطی ندارد، این پست نیز از همین قانون پیروی می‌کند و چندان ارتباطی با کتابخانه numpy ندارد. فرض کنید میخواهیم بدانیم بهینه‌ترین راه برای ایجاد یک آرایه با مقادیر اولیه خاص به کمک کتابخانه numpy در پایتون کدامیک از روش‌های زیر است.

1
2
3
import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)
import numpy as np;a = np.empty((1000, 1000)); a[:] = 5.0
import numpy as np;a = np.full((1000, 1000), 5.0)

کتابخانه timeit ساده‌ترین راه برای اندازه‌گیری زمان اجرای تکه کدهای پایتون و انتخاب روش بهینه میان این گزینه‌ها است، این کتابخانه را می‌توان مستقیما در ترمینال فراخوانی کرد.
برای آزمایش سه راه حل بالا دستور اجرایی مورد نظر ما چنین خواهند بود.

1
2
3
4
5
6
$ python -m timeit "import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)"
10 loops, best of 3: 7.19 msec per loop
$ python -m timeit "import numpy as np;a = np.empty((1000, 1000)); a[:] = 5.0"
10 loops, best of 3: 7.24 msec per loop
$ python -m timeit "import numpy as np;a = np.full((1000, 1000), 5.0)"
10 loops, best of 3: 6.87 msec per loop

همانطور که از خروجی سه دستور فوق دیده می‌شود استفاده از تابع full راه حل مناسبتری‌است. برای استفاده از این کتابخانه درون کدهای خود نیز میتوانیم به شکل زیر عمل کنیم

1
2
import timeit
timeit.timeit("import numpy as np;a = np.empty((1000, 1000)); a.fill(5.0)", number=1000)