Программирование и научные вычисления на языке Python/§8: различия между версиями

Содержимое удалено Содержимое добавлено
Отмена правки 109970, сделанной участником Maxwise (обс.)
Отмена правки 109969, сделанной участником Maxwise (обс.)
Строка 184:
==Векторизация==
Великолепным преимуществом массивов является то, что они могут обходиться без циклов и функция может применяться, как мы объясняли выше, к самому массиву и производить действия над всеми элементами:
 
 
<source lang="python">
Строка 189 ⟶ 190 :
>>> 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>
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>
 
подвластны волшебству массивов:
 
 
<source lang="python">
r = zeros(len(x))
r = sin(x)*cos(x)*exp(-x**2) + 2 + x**2</source>
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. Кроме того, что векторизация существенно повышает скорость обработки, она делает код более понятным и ясным для чтения.