Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not tuple
>>> l[1][2]
7
Еще один момент: разбиение работает, но опять же только внутри множества,
заключенного в один набор квадратных скобок. Снова создадим привычный про-
верочный массив:
>>> a = np.arange(10)
>>> a = a.reshape(2, 5)
>>> a
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
NumPy
419
Используйте разбиение, чтобы получить первый ряд — элементы начиная со
смещения 2, до конца:
>>> a[0, 2:]
array([2, 3, 4])
Теперь получим последний ряд — все элементы вплоть до третьего с конца:
>>> a[-1, :3]
array([5, 6, 7])
Вы также можете присвоить значение более чем одному элементу с помощью
разбиения. Следующее выражение присваивает значение 1000 колонкам (смеще-
ниям) 2 и 3 каждого ряда:
>>> a[:, 2:4] = 1000
>>> a
array([[ 0, 1, 1000, 1000, 4],
[ 5, 6, 1000, 1000, 9]])
Математика массивов
Создание и изменение формы массивов так нас увлекли, что мы почти забыли сделать
с ними что-то более полезное. Для начала используем переопределенный в NumPy
оператор умножения (*), чтобы умножить все значения массива за раз:
>>> from numpy import *
>>> a = arange(4)
>>> a
array([0, 1, 2, 3])
>>> a *= 3
>>> a
array([0, 3, 6, 9])
Если вы пытались умножить каждый элемент обычного списка Python на чис-
ло, вам бы понадобились цикл или включение:
>>> plain_list = list(range(4))
>>> plain_list
[0, 1, 2, 3]
>>> plain_list = [num * 3 for num in plain_list]
>>> plain_list
[0, 3, 6, 9]
Такое поведение применимо также к сложению, вычитанию, делению и другим