Python: векторы, матрицы и массивы с NumPy

Python Vectors Matrices



В этом уроке мы рассмотрим несколько полезных советов и приемов по игре с векторами, матрицами и массивами с использованием библиотеки NumPy в Python. Этот урок - очень хорошая отправная точка, если вы только начинаете заниматься наукой о данных и нуждаетесь в вводном математическом обзоре этих компонентов и о том, как мы можем поиграть с ними, используя NumPy в коде.

Библиотека NumPy позволяет нам выполнять различные операции, которые необходимо выполнять со структурами данных, часто используемыми в машинном обучении и науке о данных, такими как векторы, матрицы и массивы. Мы покажем только самые распространенные операции с NumPy, которые используются во многих конвейерах машинного обучения. Наконец, обратите внимание, что NumPy - это всего лишь способ выполнения операций, поэтому математические операции, которые мы показываем, являются основным предметом этого урока, а не сам пакет NumPy. Давайте начнем.







Что такое вектор?

Согласно Google, вектор - это величина, имеющая как направление, так и величину, особенно при определении положения одной точки в пространстве относительно другой.





Векторы очень важны в машинном обучении, поскольку они описывают не только величину, но и направление функций. Мы можем создать вектор в NumPy с помощью следующего фрагмента кода:





import numpyв качественапример

row_vector = np.array([1,2,3])
Распечатать(row_vector)

В приведенном выше фрагменте кода мы создали вектор-строку. Мы также можем создать вектор-столбец как:

import numpyв качественапример

col_vector = np.array([[1],[2],[3]])
Распечатать(col_vector)

Изготовление матрицы

Матрицу можно просто понимать как двумерный массив. Мы можем создать матрицу с помощью NumPy, сделав многомерный массив:



матрица = np.array([[1,2,3],[4,5,6],[7,8,9]])
Распечатать(матрица)

Хотя матрица в точности похожа на многомерный массив, матричная структура данных не рекомендуется по двум причинам:

  1. Массив является стандартным для пакета NumPy.
  2. Большинство операций с NumPy возвращает массивы, а не матрицу

Использование разреженной матрицы

Напомним, что разреженная матрица - это матрица, в которой большинство элементов равны нулю. Теперь распространенный сценарий обработки данных и машинного обучения - это обработка матриц, в которых большинство элементов равны нулю. Например, рассмотрим матрицу, строки которой описывают каждое видео на Youtube, а столбцы - каждого зарегистрированного пользователя. Каждое значение указывает, смотрел ли пользователь видео или нет. Конечно, большинство значений в этой матрице будут нулевыми. В преимущество с разреженной матрицей в том, что он не хранит нулевые значения. Это приводит к огромному вычислительному преимуществу и оптимизации хранения.

Давайте создадим здесь искровую матрицу:

из scipy импортный редкий

original_matrix = np.array([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(original_matrix)
Распечатать(sparse_matrix)

Чтобы понять, как работает код, мы посмотрим на вывод здесь:

В приведенном выше коде мы использовали функцию NumPy для создания Сжатый разреженный ряд матрица, в которой ненулевые элементы представлены с использованием индексов, отсчитываемых от нуля. Существуют различные виды разреженной матрицы, например:

  • Сжатый разреженный столбец
  • Список списков
  • Словарь ключей

Мы не будем здесь углубляться в другие разреженные матрицы, но знаем, что каждая из них используется индивидуально и никого нельзя назвать «лучшим».

Применение операций ко всем элементам вектора

Это распространенный сценарий, когда нам нужно применить общую операцию к нескольким элементам вектора. Это можно сделать, определив лямбду и затем векторизовав ее. Давайте посмотрим на то же самое:

матрица = np.array([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = лямбда x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

vectorized_mul_5(матрица)

Чтобы понять, как работает код, мы посмотрим на вывод здесь:

В приведенном выше фрагменте кода мы использовали функцию векторизации, которая является частью библиотеки NumPy, чтобы преобразовать простое определение лямбда в функцию, которая может обрабатывать каждый элемент вектора. Важно отметить, что векторизация просто петля по элементам и это не влияет на производительность программы. NumPy также позволяет вещание , что означает, что вместо приведенного выше сложного кода мы могли бы просто сделать:

матрица* 5

И результат был бы точно таким же. Я хотел сначала показать сложную часть, иначе вы бы пропустили раздел!

Среднее, дисперсия и стандартное отклонение

С NumPy легко выполнять операции, связанные с описательной статистикой по векторам. Среднее значение вектора можно рассчитать как:

np.mean(матрица)

Дисперсию вектора можно рассчитать как:

np.var(матрица)

Стандартное отклонение вектора можно рассчитать как:

например std(матрица)

Результат выполнения вышеуказанных команд для данной матрицы представлен здесь:

Транспонирование матрицы

Транспонирование - очень распространенная операция, о которой вы услышите всякий раз, когда будете окружены матрицами. Транспонирование - это просто способ поменять местами значения столбцов и строк матрицы. Обратите внимание, что вектор не может быть транспонирован поскольку вектор - это просто набор значений без разделения этих значений на строки и столбцы. Обратите внимание, что преобразование вектора-строки в вектор-столбец не является транспонированным (на основе определений линейной алгебры, которые выходят за рамки этого урока).

А пока мы найдем покой, просто переставив матрицу. Получить доступ к транспонированию матрицы с помощью NumPy очень просто:

matrix.T

Результат выполнения вышеуказанной команды для данной матрицы представлен здесь:

Ту же операцию можно выполнить с вектором-строкой, чтобы преобразовать его в вектор-столбец.

Сглаживание матрицы

Мы можем преобразовать матрицу в одномерный массив, если мы хотим обрабатывать ее элементы линейным образом. Это можно сделать с помощью следующего фрагмента кода:

matrix.flatten()

Результат выполнения вышеуказанной команды для данной матрицы представлен здесь:

Обратите внимание, что плоская матрица - это одномерный массив, просто линейный по моде.

Вычисление собственных значений и собственных векторов

Собственные векторы очень часто используются в пакетах машинного обучения. Итак, когда функция линейного преобразования представлена ​​в виде матрицы, тогда X, собственные векторы - это векторы, которые изменяются только в масштабе вектора, но не в его направлении. Можно сказать, что:

Xv = γv

Здесь X - квадратная матрица, а γ содержит собственные значения. Кроме того, v содержит собственные векторы. С NumPy легко вычислить собственные значения и собственные векторы. Вот фрагмент кода, в котором мы демонстрируем то же самое:

evalues, evectors = np.linalg.eig(матрица)

Результат выполнения вышеуказанной команды для данной матрицы представлен здесь:

Точечные произведения векторов

Точечные произведения векторов - это способ умножения двух векторов. Это говорит вам о сколько векторов в одном направлении , в отличие от перекрестного произведения, которое говорит вам об обратном, насколько мало векторы находятся в одном направлении (называемом ортогональным). Мы можем вычислить скалярное произведение двух векторов, как показано в фрагменте кода здесь:

a = np.array([3,5,6])
b = np.array([2. 3,пятнадцать,1])

np.dot(а, б)

Результат выполнения вышеуказанной команды для данных массивов приведен здесь:

Сложение, вычитание и умножение матриц

Сложение и вычитание нескольких матриц - довольно простая операция в матрицах. Это можно сделать двумя способами. Давайте посмотрим на фрагмент кода для выполнения этих операций. Для простоты мы будем использовать одну и ту же матрицу дважды:

np.add(матрица, матрица)

Затем две матрицы можно вычесть как:

нп. вычесть(матрица, матрица)

Результат выполнения вышеуказанной команды для данной матрицы представлен здесь:

Как и ожидалось, каждый из элементов в матрице складывается / вычитается с соответствующим элементом. Умножение матрицы аналогично нахождению скалярного произведения, как мы делали ранее:

np.dot(матрица, матрица)

Приведенный выше код найдет истинное значение умножения двух матриц, заданное как:

матрица*матрица

Результат выполнения вышеуказанной команды для данной матрицы представлен здесь:

Заключение

В этом уроке мы выполнили множество математических операций, связанных с векторами, матрицами и массивами, которые обычно используются для обработки данных, описательной статистики и науки о данных. Это был быстрый урок, охватывающий только самые общие и наиболее важные разделы широкого спектра концепций, но эти операции должны дать очень хорошее представление о том, какие операции могут выполняться при работе с этими структурами данных.

Пожалуйста, поделитесь своими отзывами об уроке в Твиттере с @linuxhint а также @sbmaggarwal (это я!).