- Numpy. Матричные вычисления¶
- Типы данных¶
- Операции для работы с массивами¶
- Создание массивов¶
- Создание массивов из имеющихся данных¶
- Создание сеток¶
- Создание массивов определенного вида¶
- Трансформации массива без изменения элементов¶
- Слияние и разделение массивов¶
- Функции, определенные для массивов¶
- Алгебраические функции¶
- Тригонометрические функции¶
- Функции двух аргументов (бинарные функции)¶
- Другие функций для массивов¶
- Сортировка, поиск, подсчет¶
- Дискретное преобразование Фурье (numpy.fft)¶
- Линейная алгебра (numpy.linalg)¶
- Случайные величины (numpy.random)¶
- Статистика¶
- Полиномы (numpy.polynomial)¶
- Оглавление
Numpy. Матричные вычисления¶
Numeric Python (NumPy)- это несколько модулей для вычислений с многомерными массивами, необходимых для многих численных приложений. Массив — это набор однородных элементов, доступных по индексам. Массивы модуля Numeric могут быть многомерными, то есть иметь более одной размерности. Количество размерностей и длина массива по каждой оси называются формой массива (shape). Размещение массива в памяти проводится в соответствии с опциями и может быть выполнено как в языке С (по последнему индексу), как в языке Fortran (по первому индексу) или беспорядочно.
Особо подчеркнем отличие массива от набора данных (списка или кортежа). Величины, входящие в массив имеют одинаковый тип и их количество жестко задается при инициализации. Элементы массива не являются объектами, это переменные в обычном понимании этого слова. Массивы позволяют экономить память и увеличивать скорость работы с большим количеством однотипных данных.
Как представлены массивы в Python? В Python массивы – это объекты, содержащие буфер данных и информацию о форме, размерности, типе данных и т.д. Как и у любого объекта, у массива можно менять атрибуты напрямую: array.shape=(2,3) или через вызов функции np.reshape(array,(2,3)). Такая же ситуация и с методами (функциями для массивов), заданными в этом классе, многие из них могут вызываться как методы array.resize(2,4) или как самостоятельные функции NumPy : np.resize(array,(2,4)). Некоторые функции являются только методами: array.flat, array.flatten, array.T. Для правильного использования таких функций, необходимо обращаться к их описанию.
Типы данных¶
В качестве элементов массива можно использовать множество типов, которые перечислены в таблице.
Типы Int, UnsignedInteger, Float и Complex соответствуют наибольшим принятым на данной платформе значениям.
Тип | Описание | Тип | Описание |
---|---|---|---|
Логический | Числа с плавающей точкой | ||
bool_ | Python bool | half | |
bool8 | 8 бит | single | C float |
Целый | double | C double | |
byte | C char | float_ | Python float |
short | C short | longfloat | C long float |
intc | C int | float16 | 16 бит |
int_ | Python int | float32 | 32 бит |
longlong | C long long | float64 | 64 бит |
intp | такой ,что может описывать указатели | float96 | 96 бит. |
int8 | 8 бит | float128 | 128 бит . |
int16 | 16 бит | Комплексные | |
int32 | 32 бит | csingle | |
int64 | 64 бит | complex_ | Python complex |
Целый без знака (натуральное) | clongfloat | ||
ubyte | C unsigned char | complex64 | два 32- битовых |
ushort | C unsigned short | complex128 | два 64- битовых |
uintc | C unsigned int | complex192 | два 96- битовых . |
uint | Python int | complex256 | два 128-битовых |
ulonglong | C long long | Строки | |
uintp | такой, что может описывать указатели | str_ | Python str |
uint8 | 8 бит | unicode_ | Python unicode |
uint16 | 16 бит | void | |
uint32 | 32 бит | Объекты Python | |
uint64 | 64 бит | object_ | любой объект Python |
Операции для работы с массивами¶
В NumPy реализовано много операций для работы с массивами:
- создание, модификация массива (изменение формы, транспонирование, поэлементные операции),
- выбор элементов,
- операции с массивами (различные типы умножения), сравнение массивов
- решение задач линейной алгебры (системы линейных уравнений, собственые вектора. собственные значения)
- создание наборов случайных данных
- быстрое преобразование Фурье
Создание массивов¶
В NumPy можно выделить три вида массивов:
- произвольные многомерные массивы (array)
- матрицы (matrix) – двухмерные квадратные массивы, для которых дополнительно определены операции возведения в степень и перемножения. Для работы с матрицами можно вместо “numpy” подключать “numpy.matrix”, в котором реализованы те же самые операции, только массивы – результаты операций будут приводится к типу “matrix”.
- сетки (grid) – массивы, в которых записаны значения координат точек сети (обычно ортогональной). Сетки позволяют удобно вычислять значение функций многих переменных.
Создание массивов из имеющихся данных¶
Для создания массивов существует множество функций. Самая распространенная из них array() .
>>> np.array([[1, 2], [3, 4]]) array([[1, 2], [3, 4]])
- a — объект или массив
- object — любой объект с упорядоченными данными
- dtype — тип данных (если не указан определяется по данным объекта)
- copy — да/нет, создать копию данных
- order — – порядок размещения элементов в памяти (Си, Фортран, любой)
- ndmin — минимальное число измерений (добавляет пустые массивы по недостающим измерениям)
- buffer — объект буфера
- count — число данных для чтения
- offset — отступ от начала
- file — объект файла
- sep — шаг чтения файла
- string — строка
- function — функция. Вызывается function(i,j,k,**kwargs), где i,j,k – индексы ячейки массива
- shape — форма массива
- **kwargs — словарь параметров для функции
- fname – имя файла
- comments – символ коментария
- delimiter – разделитель данных
Создание сеток¶
>>> np.linspace(2.0, 3.0, num=5) array([ 2., 2.25, 2.5, 2.75, 3.])
>>> np.logspace(2.0, 3.0, num=4, base=2.0) array([ 4., 5.03968, 6.34960, 8.])
>>> X, Y = np.meshgrid([1,2,3], [4,5,7]) >>> X array([[1, 2, 3], [1, 2, 3], [1, 2, 3]]) >>> Y array([[4, 4, 4], [5, 5, 5], [7, 7, 7]])
>>> np.mgrid[0:5:3j,0:5:3j] array([[[0., 0., 0.], [2.5, 2.5, 2.5], [5., 5., 5.]], [[0., 2.5, 5.], [0., 2.5, 5.], [0., 2.5, 5.]]])
>>> ogrid[0:5,0:5] [array([[0], [1], [2], [3], [4]]), array([[0, 1, 2, 3, 4]])]
- start – начало
- stop – окончание (для «arrange» по умолчанию НЕ включается, для остальных функций — включается)
- step – шаг
- num – число точек в выходном наборе
- endpoint – да/нет, включать крайнюю точку в набор данных
- retstep – да/нет, добавить в данные величину интервала
- x, y – одномерные массивы разбиения для осей.
- base – основание логарифма
Создание массивов определенного вида¶
>>> np.empty([2, 2], dtype=int) array([[-1073741821, -1067949133], [ 496041986, 19249760]])
>>> np.eye(3, k=1) array([[ 0., 1., 0.], [ 0., 0., 1.], [ 0., 0., 0.]])
>>> np.identity(3) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])
>>> np.tri(3, 5, 2, dtype=int) array([[1, 1, 1, 0, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1]])
>>> np.tril([[1,2,3],[4,5,6],[7,8,9], [10,11,12]], -1) array([[ 0, 0, 0], [ 4, 0, 0], [ 7, 8, 0], [10, 11, 12]])
>>> np.triu([[1,2,3],[4,5,6],[7,8,9], [10,11,12]], -1) array([[ 1, 2, 3], [ 4, 5, 6], [ 0, 8, 9], [ 0, 0, 12]])
>>> x = np.array([1, 2, 3, 5]) >>> N = 3 >>> np.vander(x, N) array([[ 1, 1, 1], [ 4, 2, 1], [ 9, 3, 1], [25, 5, 1]])
- shape – форма массива
- dtype – тип данных
- order – порядок размещения данных(Си, Фортран)
- a – объект типа массива
- N – число строк
- M – число столбцов
- k – задает диагональ (к=0 – главная, к>0 – смещение вверх, к
- x – одномерный массив или список
Трансформации массива без изменения элементов¶
- a
- newshape
- order
- start
- axis1, axis2
- shift
- k
- repeats
Слияние и разделение массивов¶
- tup – кортеж массивов
- axis – ось
- a – массив
- indices_or_sections – размер порции при разделении
Функции, определенные для массивов¶
Алгебраические функции¶
Тригонометрические функции¶
Все тригонометрические функции работают с радианами.
Функции двух аргументов (бинарные функции)¶
Для правильной работы с логическими бинарными функциям (AND, OR) необходимо явно их записывать через функции модуля «NumPy», а не полагаться на встроенные функции питона.
Бинарные функции поддерживают дополнительные методы, позволяющие накапливать значения результата различными способами.
- accumulate() Аккумулирование результата.
- outer() Внешнее «произведение».
- reduce() Сокращение.
- reduceat() Сокращение в заданных точках.
Методы accumulate(), reduce() и reduceat() принимают необязательный аргумент — номер размерности, используемой для соответствующего действия. По умолчанию применяется нулевая размерность.
Другие функций для массивов¶
- func1d – функция для вектора
- func – скалярная функция
- axis – индекс оси
- arr – массив
- *args, **kw – дополнительные аргументы
- nin – число входных параметров
- nout – число выходных параметров
- condlist — список условий
- funclist – список функций (для каждого условия)
Сортировка, поиск, подсчет¶
- a – массив
- axis – индекс оси для сортировки (по умолчанию «–1» — последняя ось)
- kind – тип сортировки
- order – индексы элементов, определяющие порядок сортировки
- keys – (k,N) массив из k элементов размера (N). k “колонок” будут отсортированы. Последний элемент – первичный ключ для сортировки.
- condition – матрица условий (маска)
- x, y – массивы для выбора элементов
- v – вектор
- side – позиция для вставки элемента (слева или справа от найденного индекса)
Дискретное преобразование Фурье (numpy.fft)¶
- a — массив
- s – число элементов вдоль каждого направления преобразования (если больше размерности, то дополняются нулями)
- axes – последовательность осей для преобразования
- n – ширина окна
- d – шаг по частоте при выводе
Линейная алгебра (numpy.linalg)¶
Модуль numpy.linalg содержит алгоритмы линейной алгебры, в частности нахождение определителя матрицы, решений системы линейных уравнений, обращение матрицы, нахождение собственных чисел и собственных векторов матрицы, разложение матрицы на множители: Холецкого, сингулярное, метод наименьших квадратов и т.д.
- a, b — матрицы
- out — место для результата
- ord – определяет способ вычисления нормы
- axes – массив осей для суммирования
- axis – индекс оси
- subscripts – индексы для суммирования
- *operands – список массивов
- dtype – тип результата
- offset – положение диагонали
- mode — – выбор алгоритма разложения
- full_matrices – составлять полные матрицы
- compute_uv – выводить все матрицы
- rcond – граница для отбрасывания маленьких собственных значений
- ind – число индексов для вычисления обратной
- UPLO — выбирает часть матрицы для работы
Случайные величины (numpy.random)¶
В модуле numpy.random собраны функции для генерации массивов случайных чисел различных распределений и свойств. Их можно применять для математического моделирования. Функция random() создает массивы из псевдослучайных чисел, равномерно распределенных в интервале (0, 1). Функция RandomArray.randint() для получения массива равномерно распределенных чисел из заданного интервала и заданной формы. Можно получать и случайные перестановки с помощью RandomArray.permutation(). Доступны и другие распределения для получения массива нормально распределенных величин с заданным средним и стандартным отклонением:
Следующая таблица приводит основные функции модуля.
Статистика¶
- a – массив
- axis – индекс оси
- out – место для результата
- weights- веса
- returned – дополнительно выдать сумму весов
- dtype – тип данных для накопления суммы
- overwrite_input – использовать входящий массив для промежуточных вычислений
- ddof- дельта степеней свободы (см. описание)
- x,y – данные (строки – переменные, колонки — наблюдения)
- rowvar – если не 0, то строка переменные, колонки – наблюдения (если 0, то наоборот)
- bias – определеяет нормировку, совместно с ddof
- mode — – объем выводимых данных
- old_behavior – совместимость со старой версией (без комплексного сопряжения)
- bins – разбиение по интервалам
- range – массив границ по x и по y
- normed – нормированное
- minlength – минимальное число интервалов при выводе
Полиномы (numpy.polynomial)¶
Модуль полиномов обеспечивает стандартные функции работы с полиномами разного вида. В нем реализованы полиномы Чебышева, Лежандра, Эрмита, Лагерра. Для полиномов определены стандартные арифметические функции ‘+’, ‘-‘, ‘*’, ‘//’, деление по модулю, деление с остатком, возведение в степень и вычисление значения полинома. Важно задавать область определения, т.к. часто свойства полинома (например при интерполяции) сохраняются только на определенном интервале. В зависимости от класса полинома, сохраняются коэффициенты разложения по полиномам определенного типа, что позволяет получать разложение функций в ряд по полиномам разного типа.
- coef – массив коэффициентов в порядке увеличения
- domain – область определения проецируется на окно
- window – окно. Сдвигается и масштабируется до размера области определения
Некоторые функции (например интерполяция данных) возвращают объект типа полином. У этого объекта есть набор методов, позволяющих извлекать и преобразовывать данные.
- p – полином
- x, y – набор данных для аппроксимации
- deg – степень полинома
- domain – область определения
- rcond – относительное число обусловленности элементы матрицы интерполяции с собственными значениями меньшими данного будут отброшены.
- full – выдавать дополнительную информацию о качестве полинома
- w – веса точек
- window – окно
- roots – набор корней
- m – порядок производной (интеграла)
- k – константы интегрирования
- lbnd – нижняя граница интервала интегрирования
- n – число точек разбиения
- size – число ненулевых коэффициентов