Я использую numpy версию 1.14.3 и python 2.7.12.
Ссылка на этот вопрос я нахожу резко отличающиеся скорости между инициализацией массивов с помощью np.zeros и np.empty. Однако вывод такой же.
import numpy as np
r = np.random.random((50, 100, 100))
z = np.zeros(r.shape)
e = np.empty(r.shape)
np.allclose(e, z)
Возвращает True
. Однако функции хронирования %timeit
дают очень разные результаты:
%timeit z = np.zeros(r.shape)
10000 петель, лучшее из 3: 143 мкс на петлю
%timeit e = np.empty(r.shape)
1000000 петель, лучшее из 3: 1,83 мкс на петлю
Ранее принятый ответ, упомянутый выше, говорит, что np.zeros
всегда был лучшим выбором, и что он также быстрее.
Почему бы не использовать np.empty, если он в 80 раз быстрее, чем np.zeros и возвращает тот же ответ?
Редактировать
Как указал user2285236, изменение порядка инициализации z
и e
нарушит равенство, поскольку оно перезаписывается в той же области памяти.