Меня заинтриговало сообщение в блоге Майка Краучера, где он сравнил время, необходимое для двух функций numpy.zeros((N,N))
и numpy.empty((N,N))
для N=200
и N=1000
.Я запустил небольшую петлю в блокноте Jupyter, используя магию %timeit
.График ниже показывает соотношение времени, необходимого для numpy.zero
к numpy.empty
.Для N=346
numpy.zero
примерно в 125 раз медленнее, чем numpy.empty
.При N=361
и выше обе функции требуют почти одинакового времени.
Позже, обсуждение в Твиттере привело к предположениям, что либо numpy
делает что-то особенное для небольших распределений, чтобы избежать вызова malloc
, либо что ОС может свести инициативу к нулюиз выделенной страницы памяти.
Что может быть причиной этой разницы для меньших N
и почти равного времени, необходимого для больших N
?