>>>> l
>[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
>>>> l[1,2]
>Traceback (most recent call last):
>··File "", line 1, in
>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]])
Используйте разбиение, чтобы получить первый ряд — элементы начиная со смещения 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]
Такое поведение применимо также к сложению, вычитанию, делению и другим функциям библиотеки NumPy. Например, вы можете инициализировать все элементы массива любым значением с помощью функции zeros() и оператора сложения:
>>>> from numpy import *
>>>> a = zeros((2, 5)) + 17.0
>>>> a
>array([[17.,··17.,··17.,··17.,··17.],
>·······[17.,··17.,··17.,··17.,··17.]])
NumPy содержит множество функций линейной алгебры. Например, определим такую систему линейных уравнений:
>4x + 5y = 20
>x + 2y = 13
Как мы можем найти х и у? Создадим два массива:
• коэффициенты (множители для х и у);
• зависимые переменные (правая часть уравнения):
>>>> import numpy as np
>>>> coefficients = np.array([[4, 5], [1, 2]])
>>>> dependents = np.array([20, 13])
Теперь используем функцию solve() модуля linalg:
>>>> answers = np.linalg.solve(coefficients, dependents)
>>>> answers
>array([-8.33333333,··10.66666667])
В результате получим, что x примерно равен –8.3, а у примерно равен 10.6. Являются ли эти числа решениями уравнения?