Язык программирования Python.

Срезы.

Объекты–массивы Numeric используют расширенный синтаксис выделения среза. Следующие примеры иллюстрируют различные варианты записи срезов. Функция Numeric.arrayrange() является аналогом range() для массивов.

>>> import Numeric.

>>> a = Numeric.arrayrange(24) + 1.

>>> a.shape = (4, 6).

>>> print a # исходный массив.

[[ 1  2  3  4  5  6].

 [ 7  8  9 10 11 12].

 [13 14 15 16 17 18].

 [19 20 21 22 23 24]].

>>> print a[1,2]     # элемент 1,2.

9.

>>> print a[1,:]     # строка 1.

[ 7 8 9 10 11 12].

>>> print a[1]       # тоже строка 1.

[ 7 8 9 10 11 12].

>>> print a[:,1]     # столбец 1.

[ 2 8 14 20].

>>> print a[-2,:]    # предпоследняя строка.

[13 14 15 16 17 18].

>>> print a[0:2,1:3] # окно 2x2.

[[2 3].

[8 9]].

>>> print a[1,::3]   # каждый третий элемент строки 1.

[ 7 10].

>>> print a[:,:: -1] # элементы строк в обратном порядке.

[[ 6  5  4  3  2  1].

 [12 11 10  9  8  7].

 [18 17 16 15 14 13].

 [24 23 22 21 20 19]].

Срез не копирует массив (как это имеет место со списками), а дает доступ к некоторой части массива. Далее в примере меняется на 0 каждый третий элемент строки 1:

>>> a[1,::3] = Numeric.array([0,0]).

>>> print a.

[[ 1  2  3  4  5  6].

 [ 0  8  9  0 11 12].

 [13 14 15 16 17 18].

 [19 20 21 22 23 24]].

В следующих примерах находит применение достаточно редкая синтаксическая конструкция: срез с многоточием ( Ellipsis). Многоточие ставится для указания произвольного числа пропущенных размерностей ( :, :, ..., :):

>>> import Numeric.

>>> a = Numeric.arrayrange(24) + 1.

>>> a.shape = (2,2,2,3).

>>> print a.

[[[[ 1  2  3].

   [ 4  5  6]].

  [[ 7  8  9].

   [10 11 12]]].

 [[[13 14 15].

   [16 17 18]].

  [[19 20 21].

   [22 23 24]]]].

>>> print a[0,...] # 0–й блок.

[[[ 1 2 3].

  [ 4 5 6]].

 [[ 7 8 9].

  [10 11 12]]].

>>> print a[0,:,:,0] # срез по первой и последней размерностям.

[[ 1  4].

 [ 7 10]].

>>> print a[0,...,0] # то же, но с использованием многоточия.

[[ 1  4].

 [ 7 10]].