Скорость np.empty против np.zeros - PullRequest
       0

Скорость np.empty против np.zeros

0 голосов
/ 10 сентября 2018

Я использую 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 нарушит равенство, поскольку оно перезаписывается в той же области памяти.

1 Ответ

0 голосов
/ 10 сентября 2018

np.empty и np.zeros делают разные вещи.

np.empty создает массив из доступного пространства памяти, оставляя все значения, которые висят в памяти, в качестве значений. Эти значения могут быть или не быть нулями.

np.zeros создает массив из доступного пространства памяти, а затем заполняет его нулями для выбранного вами dtype. Очевидно, np.zeros должен выполнять больше работы, поэтому он должен быть медленнее, поскольку он также выполняет запись в выделенную память.

Более справедливое сравнение будет между np.empty и np.ndarray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...