Используйте numpy.mean, чтобы перечислять намного медленнее, чем numpy.array - PullRequest
0 голосов
/ 05 мая 2019

Я думаю, очевидно, что применение методов Numpy непосредственно к спискам Python медленнее.Я подумал, что причина этого была в том, что метод Numpy, скажем, numpy.mean, преобразует список в массив перед вычислением среднего значения.Но после попытки кода ниже, это НЕ случай, когда: время преобразования списка в массив + время среднего значения массива == время среднего значения списка .Кто-нибудь может объяснить, почему?

import numpy as np
from time import time

r = [i for i in range(1000000)]

start_list = time()
np.mean(r)
end_list = time() - start_list

start_array = time()
np.mean(np.array(r))
end_array = time() - start_array

Первый: 0,060173988342285156

Второй: 0,05114173889160156

1 Ответ

1 голос
/ 05 мая 2019

Запуск кода только один раз, наблюдая за временем настенных часов, - не лучший способ измерить его скорость, потому что другие процессы могут случайно и непредсказуемо повлиять на результат.Вы должны запустить его несколько раз (чем больше, тем лучше) и взять среднее.В Python есть специальный модуль для таких целей, который называется timeit .Например, на моей машине я получаю следующие результаты:

from timeit import timeit

setup = """import numpy as np
r = list(range(1000000))"""
n = 100
print(timeit("np.mean(r)", setup=setup, number=n))
print(timeit("np.mean(np.array(r))", setup=setup, number=n))

Вывод:

4.940829735947773
4.928034849930555

Или используя соответствующий IPython magic :

import numpy as np
r = list(range(1000000))
%timeit np.mean(r)
%timeit np.mean(np.array(r))

Вывод:

49.4 ms ± 189 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
49.5 ms ± 202 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Это означает, что время выполнения существенно не отличается.

Я использую Windows 10, Python 3.7.3 и numpy 1.16.2.

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