Наука о данных

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

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

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

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

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

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

импортировать numpy как np
row_vector = np.массив ([1,2,3])
печать (row_vector)

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

импортировать numpy как np
col_vector = np.массив ([[1], [2], [3]])
печать (col_vector)

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

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

матрица = np.массив ([[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 = разреженный.csr_matrix (исходная_матрица)
печать (sparse_matrix)

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

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

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

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

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

матрица = np.множество([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mul_5 = лямбда x: x * 5
vectorized_mul_5 = np.векторизация (mul_5)
vectorized_mul_5 (матрица)

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

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

матрица * 5

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

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

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

нп.среднее (матрица)

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

нп.var (матрица)

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

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

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

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

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

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

матрица.Т

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

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

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

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

матрица.сплющить ()

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

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

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

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

Xv = γv

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

evalues, evectors = np.линалг.eig (матрица)

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

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

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

а = np.массив ([3, 5, 6])
b = np.массив ([23, 15, 1])
нп.точка (а, б)

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

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

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

нп.добавить (матрица, матрица)

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

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

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

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

нп.точка (матрица, матрица)

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

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

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

Заключение

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

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

Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...
Vulkan для пользователей Linux
С каждым новым поколением видеокарт мы видим, как разработчики игр расширяют границы графической точности и приближаются на шаг ближе к фотореализму. ...