Программирование и научные вычисления на языке Python/§8: различия между версиями
Содержимое удалено Содержимое добавлено
LeoMat (обсуждение | вклад) Нет описания правки |
LeoMat (обсуждение | вклад) Нет описания правки |
||
Строка 176:
Заметьте, что в цикле мы используем вместо <tt>range</tt> другую функцию — <tt>xrange</tt>. Она является более предпочтительной (обычно больших) массивов. Также отметим, что для y мы использовали генерацию списка, а для y2 — цикл for, поскольку массив это не список. Из положения можно выйти с помощью конвертирования:
Строка 184 ⟶ 183 :
Тем не менее, есть
==Векторизация==
Великолепным преимуществом массивов является то, что они могут обходиться без списков и функция может применяться, как мы объясняли выше, к самому массиву и производить действия над всеми элементами:
<source lang="python">
>>> y2 = f(x2)
>>> y2
array([ 0. , 0.015625, 0.125 , 0.421875, 1. ])</source>
И даже сложные составные выражения
<source lang="python">
r = sin(x)*cos(x)*exp(-x**2) + 2 + x**2</source>
подвластны волшебству массивов:
<source lang="python">
r = zeros(len(x))
for i in xrange(len(x)):
r[i] = sin(x[i])*cos(x[i])*exp(-x[i]**2) + 2 + x[i]**2</source>
Это свойство и называется векторизацией. Существенный выигрыш в скорости по сравнению со списками происходит из-за того что в генерации списков используется относительно медленные циклы самого Python, в то время как векторизация их никак явно не использует, а задействует «быстрые циклы» внутри numpy. Кроме того, что векторизация существенно повышает скорость обработки, она делает код более понятным и ясным для чтения.
==Ссылки==
[http://www.scipy.org/SciPy Проект научных вычислений SciPy] — отсюда можно скачать пакеты NumPy и SciPy
[http://pyviy.blogspot.com/2009/09/numpy.html Краткое введение в NumPy]
[http://koldunov.net/?p=381 Шпаргалка по массивам в SciPy (NumPy) (рус.)]
[http://docs.scipy.org/doc/numpy/user/ Руководство по NumPy (англ.)]
[[Категория:Python]]
|