Почему в некоторых случаях numpy с массивом работает так же или медленнее списка Python

Вот результат выполнения следующего кода в блокноте

import numpy as np, array
lst = [*range(100_000)]
narr = np.array(lst)
parr = array.array('i', lst)

%timeit np.sum(narr)
%timeit np.sum(np.array(lst))
%timeit sum(lst)
%timeit sum(parr)

это вывод:

19.4 µs ± 15.1 ns per loop (19.4 микросекунды за 100_000 итераций) - np.sum(narr), narr рассчитан заранее
3.76 ms ± 1.88 µs per loop (3.76 миллисекунды, за 100 итераций) - np.sum(np.array(lst)) narr рассчитывается в аргументе функции np.sum
1.12 ms ± 2.98 µs per loop (1.2 миллисекунды, за 1_000 итераций) - sum(lst)
2.11 ms ± 14.7 µs per loop (2.11 миллисекунды, за 100 loops each) - sum(parr)

Интересует неимоверная разница м/у np.sum(narr) и np.sum(np.array(lst)) - 193 тыс. раз получается, что numpy ускоряет(векторизует), только при правильной подстановке аргумента. Кроме того sum со списком работает быстрее чем sum с массивом.


Ответы (1 шт):

Автор решения: eri

Преобразование np.array(lst) занимает время. в этой строчке выполняется не только sum, но и это преобразование. В первой строчке считается тоже самое, но отдельно.

→ Ссылка