четверг, 17 мая 2018 г.

Python. Массивы

В принципе, массивы в 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 разложение матрицы

Комментариев нет:

Отправить комментарий