В принципе, массивы в Python можно построить за счёт комбинации списков, однако при больших размерах массива данное решение неэффективно, т.к. работать будет сравнительно медленно, а памяти потребует много. К тому же, все специальные операции придётся задавать вручную. Для решения данных проблем был создан модуль NumPy.
Построить массив в NumPy можно с помощью конструктора, который принимает элементы массива (представленные в виде стандартного списка Python), а также ряд опциональных параметров, одним из которых является тип чисел. Именно работа с однородными числами позволяет ускорить операции над элементами массива. Типичными значениями являются int для целых чисел или float для величин с плавающей точкой, хотя возможны и другие варианты, например, uint8 при работе с изображениями. Если данный аргумент опущен, будет автоматически подобран минимально необходимый тип, описывающий все элементы массива.
Если мы хотим задать матрицу, каждая строка должна быть представлена отдельным списком. Для доступа к элементу массива необходимо указать его индекс в квадратных скобках, нумерация начинается с нуля. Допускается перечисление индексов через запятую.
Размер массива можно узнать из свойства shape, а тип элементов - dtype. Обратите внимание, что свойства, в отличие от функций, не принимают аргументов, т.е. не имеют скобок. Интересной особенностью является возможность проверки принадлежности элемента массиву с помощью команды in.
Объединить несколько массивом можно с помощью методаconcatenate(кортеж_массивов, ось).
Первый аргумент - последовательность элементов в виде кортежа. Второй является опциональным и определяет, относительно какой из осей выполняется операция (по умолчанию axis=0). Для создания копии объекта служит функция copy().
Выделить подмножество элементов можно с помощью двоеточия, как это принято для списков в Python (и напоминает выделение части матрицы в Matlab-подобных программах).
NumPy умеет генерировать "стандартные" типы массивов:
numpy.ones(размер, тип) - массив единиц
numpy.zeros(размер, тип) - массив нулей
numpy.ones_like(массив) - эквивалентный массив единиц
numpy.zeros_like(массив) - эквивалентный массив нулей
numpy.identity(размер, тип) - единичная матрица
numpy.eye(размер, тип, сдвиг) - единичная матрица со сдвигом диагонали
numpy.random.rand(ось1, ось2, ...) - матрица случайных чисел от 0 до 1
Арифметические операции в NumPy выполняются поэлементно, соответственно, массивы должны иметь одинаковый размер. Однако, программа позволяет работать и с разными по размеру массивами, при этом меньший из них будет увеличен за счёт повторения своих элементов.
NumPy включает в себя ряд функций, таких как abs, sin, cos, tan, sign, sqrt и т.п. Все они умеют могут принять в качестве аргумента массив чисел, при этом требуемая функция будет рассчитана для всех элементов массива.
Над массивами можно выполнять ряд операций, связанных с содержимым, таких как:
numpy.sum() - сумма элементов
numpy.prod() - произведение элементов
numpy.mean() - среднее значение
numpy.var() - дисперсия
numpy.std() - стандартное отклонение
numpy.min() - наименьший элемент
numpy.max() - наибольший элемент
numpy.argmin() - индекс наименьшего элемента
numpy.argmax() - индекс наибольшего элемента
numpy.clip(от,до) - ограничить элементы заданным диапазоном
numpy.unique() - числа, которые встречаются хотя бы один раз
numpy.diagonal() - элементы главной диагонали
Данные функции могут быть вызваны либо как методы массива, либо как объекты модуля numpy. Операции типа min могут быть выполнены для конкретной оси, например min(axis=1).
Для матриц и векторов предусмотрен ряд специальных операций.
numpy.dot(a,b) - произведение матриц или векторов
numpy.inner(a,b) - скалярное произведение векторов
numpy.outer(a,b) - произведение векторов при изменении порядка транспонирования
numpy.cross(a,b) - векторное произведение векторов
numpy.transpose(a) - транспонирование
numpy.linalg.det(a) - определитель матрицы
numpy.linalg.eig(a) - собственные векторы и числа
numpy.linalg.inv(a) - обратная матрица
numpy.linalg.svd(a) - SVD разложение матрицы
Комментариев нет:
Отправить комментарий