Как транспонировать матрицу в python
Перейти к содержимому

Как транспонировать матрицу в python

  • автор:

Как транспонировать матрицу в python

Transpose of a matrix is a task we all can perform very easily in python (Using a nested loop). But there are some interesting ways to do the same in a single line.
In Python, we can implement a matrix as nested list (list inside a list). Each element is treated as a row of the matrix. For example m = [[1, 2], [4, 5], [3, 6]] represents a matrix of 3 rows and 2 columns.
First element of the list – m[0] and element in first row, first column – m[0][0].

    Using Nested List Comprehension: Nested list comprehension are used to iterate through each element in the matrix. In the given example, we iterate through each element of matrix (m) in column major manner and assign the result to rez matrix which is the transpose of m.

Transpose of a Matrix in Python

The transpose of a matrix is nothing but a matrix obtained by changing the rows into columns and columns into rows. If a matrix is initially N x M , then after the transpose, the matrix becomes M x N . We can denote the transpose of a matrix (A) by A' or A^T. Transpose of a matrix in python can be implemented in various ways such as nested loops, nested list comprehension, zip() function, and transpose() function of NumPy library.

Scope

The article contains topics such as

  • Introduction to the transpose of a matrix in Python.
  • transpose of a matrix using Nested Loop, transpose of a matrix using Nested List Comprehension, transpose of a matrix using Zip, transpose of a matrix using NumPy library.

Each of the topics is explained clearly with diagrams and examples wherever necessary.

Introduction to Matrix Transpose in Python

Before learning how to transpose a matrix in Python, we should first understand the matrix and transpose of a matrix.

A matrix is a rectangular array of some data(numbers, letters, or other objects) arranged in the form of rows and columns. A matrix is composed of rows and columns. If the number of rows is N and the number of columns is M. Then we say the matrix is a N x M matrix. Refer to the image below to see how a matrix is represented using subscripts.

Now, the transpose of the matrix is nothing but a matrix obtained by changing the rows into columns and columns into rows. If a matrix is initially N x M (N is several rows and M is several columns), then after the transpose, the matrix becomes M x N (M is the number of rows and N is several columns). Refer to the image below to visualize the transpose of a matrix.

Note: Transpose of a matrix A is denoted by either A' or A^T.

Now, in python a matrix can be implemented using nested lists. Example: matrix = [[1, 2], [2, 3], [3, 4]] As we can see, the matrix has 3 rows and 2 columns so it is a 3×2 matrix. We can visualize the matrix as:

After the transpose, the matrix has 2 rows and 3 columns so it becomes a 2×3 matrix. The transpose of the matrix will look like as shown below:

The transpose of a matrix in Python can be implemented in various ways. Let us now discuss them one by one.

Transpose of a Matrix using Nested Loop

As we have seen, we can implement a matrix using nested lists(lists inside a list). So, we can use a nested loop (loop inside another loop). By running two loops (using I and j variables), we can change the value present at the ith row and jth column to the jth row and ith column. Refer to the code below for a better understanding.

Output:

Here, we are placing the matrix[i][j] element into the transpose[j][i] .

Transpose of a Matrix using Nested List Comprehension

We have seen how to get transpose of a matrix in python using nested loops, but we can also use the pythonic way (shorter way). List comprehension (creating lists based on existing iterables) is very frequently used in these scenarios as list comprehension helps us to write concise codes (codes which take less space). Refer to the code below for a better understanding.

Output:

Transpose of a Matrix using Zip

We can also obtain the transpose of a matrix in python using the map() function and zip() function.

Note:

  • map() is a function that works as an iterator, it returns a result after applying the provided function on each of its iterable items.
  • zip(iterable) is also a function that takes iterables as arguments and returns an iterator.

Let us see the code for better understanding.

Output:

Transpose of a Matrix using NumPy Library

So far, we have seen all the built-in methods of getting the transpose of a matrix in python. We can use a library named NumPy , built to work around arrays. The NumPy library helps us to work with large data sets and supports various methods that help us to work with multi-dimensional arrays efficiently. We will use the transpose() function of the NumPy library. Let us see the code for a better understanding.

Output:

Note: Since NumPy is an external library, we need to install NumPy with the command `pip install NumPy.

For Square Matrix

The transpose of a square matrix results in another square matrix because the number of rows and columns are the same. Let us take an example of a square matrix ( NxN ):

Output:

For Rectangular Matrix

As we know, the transpose of an NxM matrix will result in an NxM matrix. Since N and M are of different values, the matrix is not considered a rectangular matrix. Let us take an example of the 2×5 matrix:

NumPy #

Первая сторонняя библиотека, с которой мы познакомимся — NumPy (Numerical Python).

Библиотека NumPy предоставляет доступ к многомерным массивам однородных данных (одного типа, обычно числа), подобным массивам C/C++ , и к методам их обработки. Под капотом эти самые массивы реализованы с помощью динамических массивов C , которые в отличие от списков хранят непосредственно данные, а не указатели на них.

Зачем нужен NumPy #

Необходимость в специальной библиотеке для работы с большими массивами чисел возникает из-за скорости работы python . За гибкость, выразительность, динамическую типизацию и многие другие достоинства python приходится платить скоростью: код написанный на python , практически всегда будет работать медленнее, чем аналогичный код, написанный на C/C++ . Проще всего продемонстрировать это на примере с громоздкими циклами.

Документацию по модулю time можно найти по этой ссылке, а по модулю random по этой ссылке.

Выше приведено содержимое двух файлов с исходным кодом, каждый из которых складывает два вектора чисел размерности \(10^8\) .

Первый файл на языке C++ использует для представления векторов в программе std::vector.

Второй файл на языке python использует для представления векторов в программе списки.

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

В среднем я получил следующие результаты.

Вообще говоря, на эти цифры может повлиять огромное количество факторов, в том числе и случайных. Тем не менее разница настолько явная, что качественная картина ясна: циклы в C/C++ работают заметно быстрее, чем в python .

“Среднее” приложение на python не сталкивается с обработкой больших объемов данных и обычно разница в производительности компенсируется затраченным на реализацию алгоритма временем. Но научные вычисления очень часто представляют собой “программы по перемолке чисел” и такое замедление существенно.

Чтобы совместить скорость компилируемого языка и удобство python многие библиотеки поставляются вместе со скомпилированными модулями, написанными на C/C++ (или другом компилируемом языке), а в python “прокидывают” интерфейс для взаимодействия с ними. NumPy — яркий пример такой библиотеки.

Установка NumPy #

В anaconda NumPy установлен по умолчанию, а установить его с помощью PyPI можно следующей командой.

Установив NumPy , чтобы пользоваться им в программе, необходимо его импортировать.

Библиотека NumPy используется настолько часто и настолько многими, что сложилась традиция импортировать NumPy с псевдонимом np . Любой программист, увидев где-то в коде выражение вида np.some_method() догадается, что вызывается метод some_method из библиотеки NumPy и ему не потребуется искать глазами определение объекта np , чтобы понять, что скрывается за этим именем.

О массивах NumPy . Тип данных, размерность, оси и форма.#

В ячейке ниже создаётся массив NumPy из случайных чисел. Можете пока не вникать, как конкретно он создаётся. Важно лишь понять, что имя array связывается с каким-то массивом NumPy .

Массивы в библиотеке представляются типом numpy.ndarray (n dimensional array, n-мерный массив).

Тип ndarray является типизированным контейнером данных, т.е. он предназначен для хранения данных одного и того же типа данных. Тип данных массива хранится в атрибуте dtype (data type). Этих типов может быть много, но большинство из них — стандартные числовые типы C/C++ : np.bool8 , np.int8 , np.int16 , np.int32 , np.int64 , np.unit8 , np.unit16 , np.unit32 , np.uint64 , np.float16 , np.float32 , np.float64 , np.complex64 , np.complex128 (подробнее про типы данных).

Целые числа в массивах NumPy введут себя совсем не как тип int из python : они всегда занимают определенное количество байт и могут переполняться, т.е. совпадают с целочисленными типами из C/C++ .

Вообще говоря, в массивах NumPy можно хранить и объекты произвольного типа, но тогда вместо самих объектов, в массиве будут храниться ссылки на них. Чаще всего массивы NumPy используются все же для хранения чисел.

Исходя из значения атрибута dtype массива array можно понять, что он хранит в себе 64-битные числа с плавающей запятой.

Ещё NumPy массивы хранят количество своих измерений в атрибуте ndim (number of dimensions). Массивы NumPy могут быть любой размерности: одномерные массивы часто используются для представления векторов, двумерные — для представления матриц и таблиц, массивы более высоких размерностей — для представления тензоров, массивы любых размерностей часто используются для представления значений некоторой функции векторного аргумента на сетке в многомерном пространстве.

Исходя из значения атрибута ndim массива array видим, что он является двухмерным.

Ещё обязательный атрибут массивов NumPy — форма ( shape ) — размеры массива вдоль каждого измерения. Эти измерения называются осями ( axis в ед. числе и axes в мн. числе).

Атрибут shape массива array говорит нам, что у него есть 2 элемента вдоль первого измерения и 3 вдоль второго. Иными словами можно сказать, что это таблица из двух строк и трех столбцов.

Общее количество элементов в массиве (произведение количеств элементов вдоль каждой из осей) хранится в атрибуте size .

Все массивы должны быть выравненными, т.е. не может быть матрицы со строками разных длин, трехмерного массива из матриц разных размеров и т.п.

Картинка ниже наглядно иллюстрирует смысл всех только что введенных понятий.

../../_images/ndarrays.png

Создание массивов#

Создавать массивы NumPy — ndarray — можно огромным количеством образом, но для их создания редко используется конструктор самого типа. Вместо этого гораздо чаще используются другие методы. Например, метод numpy.array конструирует ndarray из других объектов.

Чаще всего он используется для создания массивов NumPy из python списков чисел. Тип данных выводится как самый общий тип данных, если он не указан явно именованным параметром dtype .

Ниже создаётся одномерный массив из списка четырёх чисел. При этом тип данных явно не указывается и в итоге получается массив чисел с плавающей точкой ( float64 ), т.к. в исходном списке были числа типа int и float .

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

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

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

start , stop , end

Аналог np.array(range) , но можно использовать float в качестве аргументов

start , stop , num , endpoint=True

Разбиение отрезка [ start , stop ] на num отрезков, если передать в качестве endpoint=False , то последняя точка не включается

Массив заданной формы из нулей

Массив заданной формы из единиц

Не метод, а подмодуль, содержащий методы создания массивов случайных значений

Если m не указан, то квадратная единичная матрица размера nxn , иначе нулевая матрица размера nxm с единицами на диагонали

Python Matrix — учебное пособие по матрицам

Мы можем реализовать матрицу Python в форме 2-го списка или 2-го массива. Для выполнения операций с Python Matrix нам необходимо импортировать Python NumPy Module.

Matrix важен в области статистики, обработки данных, обработки изображений и т. д.

Python Matrix объяснение

Создание матрицы Python

Матрицу Python можно создать одним из следующих способов:

  • Используя списки
  • Используя метод arange()
  • и метода matrix()

1 С использованием списков

numpy.array() можно использовать для создания массива, используя списки в качестве входных данных.

Как видно выше, выходные данные представляют собой двумерную матрицу с заданным набором входных данных в виде списка.

2 С помощью функции numpy.arange()

numpy.arange() вместе со списком входов.

3 С помощью функции numpy.matrix().

Функция numpy.matrix() , ее синтаксис:

  • input: элементы input для формирования матрицы.
  • dtype: тип данных соответствующего вывода.

Сложение

Операцию сложения матриц можно выполнить следующими способами:

  • Традиционный метод
  • Используя оператор ‘+’

1 Традиционный метод

В этом традиционном методе мы в основном берем ввод от пользователя, а затем выполняем операцию сложения с использованием циклов for (для обхода элементов матрицы) и оператора ‘+’.

Примечание. Matrix.shape возвращает размеры конкретной матрицы.

2 Использование оператора «+»

Этот метод обеспечивает большую эффективность кода, поскольку он уменьшает LOC (количество строк кода) и, таким образом, оптимизирует код.

Умножение матриц

Умножение матриц в Python можно обеспечить следующими способами:

  • Скалярное произведение;
  • Матричный продукт.

Скалярное произведение

В скалярном произведении постоянное значение умножается на каждый элемент матрицы.

Оператор ‘*’ используется для умножения скалярного значения на элементы входной матрицы.

Функция numpy.dot()

Как упоминалось выше, мы можем использовать оператор ‘*’ только для скалярного умножения. Чтобы продолжить умножение матриц, нам нужно использовать numpy.dot() .

Функция numpy.dot() принимает массивы NumPy в качестве значений параметров и выполняет умножение в соответствии с основными правилами умножения матриц.

Вычитание

Оператор ‘-‘ используется для выполнения вычитания матриц.

Деление

Скалярное деление может выполняться на элементах матрицы в Python с помощью оператора ‘/’.

Оператор ‘/’ делит каждый элемент матрицы на скалярное / постоянное значение.

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

Транспонирование матрицы в основном включает в себя переворачивание матрицы по соответствующим диагоналям, т. е. Меняет местами строки и столбцы входной матрицы. Строки становятся столбцами и наоборот.

Например: давайте рассмотрим матрицу A с размерами 3 × 2, т.е. 3 строки и 2 столбца. После выполнения операции транспонирования размеры матрицы A будут 2 × 3, т.е. 2 строки и 3 столбца.

Matrix.T основном выполняет транспонирование входной матрицы и создает новую в результате операции транспонирования.

В приведенном выше фрагменте кода я создал матрицу размером 2 × 5, т.е. 2 строки и 5 столбцов.

После выполнения операции транспонирования размеры результирующей матрицы составляют 5 × 2, то есть 5 строк и 2 столбца.

Экспонента

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

В приведенном выше фрагменте кода мы выяснили показатель степени каждого элемента входной матрицы, возведя его в степень 2.

Операция умножения с использованием методов NumPy

Для выполнения умножения матрицы NumPy можно использовать следующие методы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *