Использование python 2.7
Ниже приведены мои скорости вместе с xrange:
python -m timeit -s "import numpy" "for k in numpy.arange(5000): k+1"
1000 циклов, лучше всего 3: 1,22 мс за цикл
python -m timeit "for k in range(5000): k+1"
10000 циклов, наилучшее из 3: 186 usec за цикл
python -m timeit "for k in xrange(5000): k+1"
10000 циклов, лучше всего 3: 161 usec за цикл
Numpy заметно медленнее, потому что он выполняет итерацию по numpy-specific array. Это не основная функция. Во многих случаях их следует рассматривать скорее как монолитный набор чисел, а не простых списков / итераций. Например, если у нас есть довольно большой и-пиш-список чисел, который мы хотим поднять до третьей степени, мы можем сделать что-то вроде этого:
python -m timeit "lst1 = [x for x in range(100000)];" "lst2 = map(lambda x: x**3, lst1)"
10 петель, лучше всего 3: 125 msec per loop
Примечание: lst1 представляет собой произвольный список. Я знаю, что вы можете ускорить это в исходной лямбда, выполнив x ** 3 для x в диапазоне, но это связано с списком, который должен уже существовать и может быть очень не последовательным.
В любом случае, numpy должен рассматриваться как массив:
python -m timeit -s "import numpy" "lst1 = numpy.arange(100000)" "lst2 = lst1**2"
10000 циклов, лучше всего 3: 120 usec за цикл
Скажем, у вас было два списка произвольных значений , каждый из которых вы хотите размножать вместе. В ванильном python вы можете сделать:
python -m timeit -s "lst1 = [x for x in xrange(0, 10000, 2)]" "lst2 = [x for x in xrange(2, 10002, 2)]" "lst3 = [x*y for x,y in zip(lst1, lst2)]"
1000 циклов, лучше всего 3: 736 usec за цикл
И в Numpy:
python -m timeit -s "import numpy" "lst1 = numpy.arange(0, 10000, 2)" "lst2 = numpy.arange(2, 10002, 2)" "lst3 = lst1*lst2"
100000 циклов, лучше всего 3: 10,9 usec за цикл
В этих последних двух примерах NumPy взлетает вперед в качестве явного победителя. Для простой итерации по списку диапазон или xrange вполне достаточен, но ваш пример не учитывает истинную цель массивов Numpy. Это сравнение самолетов и автомобилей; да, самолеты, как правило, быстрее для того, что они предназначены, но попытка летать в ваш местный супермаркет не является разумной.