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

Для начала запишем систему уравнений в общем виде:

Коэффициенты при неизвестных составляют прямоугольную таблицу:

называемую матрицей из m строк и n столбцов.

Небольшая справка по определениям:

1) Если система уравнений не имеет ни одного решения, то она называется несовместной.

2) Если система обладает решениями, то она является совместной.

3) Если система имеет единственное решение, то она является определенной и неопределенной, если решений больше, чем одно.

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

Для более удобной работы с матрицами лучше всего использовать Jupyter Notebook, который вы можете использовать, скачав Anaconda. Jupyter имеет несколько основных преимуществ: 1) Многие библиотеки уже установлены, 2) Блочный код, т.е. вы можете проверить его по частям, 3) Довольно простое создание и использование собственных библиотек.

Если вам не понравиться Jyputer, вы можете перейти на Google Colab.

Способы создания матриц:

Для работы с матрицами в Python в основном используется 2 библиотеки: Sympy и Nympy.

Рассмотрим базовые методы для Sympy:

Дана матрица:

from sympy import *
А = Matrix([[-3, 9, 2,4,0], [1,4,-1,3,-1], [0,2,-2,4,2], [3,1,0,-2,3]])

Чтобы узнать размерность матрицы воспользуемся методом shape() (т.е. узнаем сколько столбцов и строчек в этой матрице)

shape(A)

Также можно взять отдельную строчку или столбец(нумерация работает также, как индексы в Python):

A.row(0)
A.col(-1)

Также вы можете удалять строчки или столбцы с помощью команд row_del() и col_del()

A.col_del(0)
A.row_del(1)

Можно еще и добавлять строки и столбцы, указывая на какое место вы бы хотели их поставить по индексу

M = Matrix([[1, 2], [-2, 0]])
M = M.row_insert(1, Matrix([[0, 4]]))
M = M.col_insert(0, Matrix([1, -2, 3]))

Также в Sympy есть отдельные методы для некоторых типов матриц:

1) Нулевая матрица

zeros(3,2)

2) Матрица, состоящая из единиц

ones(3,2)

3) Единичная матрица(квадратичная матрица, у которой на главной диагонали единицы, а остальные нули)

eye(4)

Также можно задать матрицу по главной диагонали:

diag(1,2,3)

Для продвинутых ребят можно сделать такие прикольные штуки

diag(-1, ones(2,2), Matrix([5,7,5]))l

Рассмотрим задание матрицы в Numpy

import numpy as np
C = np.array([[1,2,3], [4,5,6], [7,8,9]])
M = np.matrix([[1,2,3], [4,5,6], [7,8, 9]])

Ну и совсем странный способ

H = np.matrix('1,2,3;4,5,6;7,8,9')

В Numpy методы для быстрого создания матрицы практически такие же

1) Матрица из нулей

np.zeros((2,3))

2) Матрица из единиц

np.ones((2,3))

3) Единичная матрица

np.eye(3)

И создание матрицы через главную диагональ

np.diag([1,2,3])

Также в этой статья я хочу рассмотреть основные математические операции с матрицами(сложение, вычитание, умножение)

Сложение

Складывать и вычитать матрицы можно только одинаковой размерности - т.е. матрицы, у которых совпадает кол-во строк и строчек

На Sympy:

A = Matrix([[1,2,3], [4,5,6], [7,8,9]])
B = Matrix([[1,2,3], [4,5,6], [7,8,9]])
print(A+B)

На Numpy:

A = np.array([[1,2,3], [4,5,6], [7,8,9]])
B = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(A+B)

Свойства сложения матриц

1) A+B=B+A(коммутативность)

2) A+(B+C) = (A+B)+C(ассоциативность)

3) Для любой матрицы A существует противоположная ей (-A), такая что их сумма является нулевой матрицей

Вычитание работает в Python по тем же правилам.

Умножение матрицы на число происходит самым интуитивно понятным образом: каждый элемент матрицы домножается на число

А вот перемножение матриц является более сложной операцией

Примечание:

Перемножить можно только те матрицы, если число столбцов матрицы A равно числу строк матрицы B. Если матрица A имеет размер (m*n), а матрица B имеет размер(k*n), то полученная матрица будет (m*n).

Пример

В Sympy это делается через простую операцию умножения

A = Matrix([[1,2,3], [4,5,6]])
B = Matrix([[7,8], [9, 1], [2,3]])
C = A*B

B Numpy это делается череp операцию dot():

A = np.array([[1,2,3], [4,5,6]])
B = np.array([[7,8], [9, 1], [2,3]])
C = A.dot(B)
print(C)

На этом сегодня все. В следующей статье рассмотрим решение систем линейных уравнений, методы Гаусса и Жордана, построение через разложение и нахождение определителя матрицы. Пишите, что еще хотите узнать в моем разборе. Для личного общения со мной: https://t.me/Nikotineaddiction

Комментарии (9)


  1. EOShipnyagov
    07.07.2023 20:29
    -2

    Годно, авось наконец смогу понять эльфийский из вузовских учебников


  1. flx0
    07.07.2023 20:29
    +8

    sympy - это бибилиотека символьной алгебры, не надо ее использовать для матриц! Это как забивать гвозди коллайдером.

    И вообще статья, конечно, ни о чем. Переписанная (и даже вставленная скриншотами) школьная методичка. Еще и на несколько частей зачем-то разбить решили...


  1. perfect_genius
    07.07.2023 20:29
    -1

    самым простым языком

    Для кого простым?


  1. Dave_by
    07.07.2023 20:29
    +3

    Смотрю на картинки где матрицы рисуются вручную и прям видно как автору все ленивее и ленивее вырисовывать буковки и циферки.


  1. grmile
    07.07.2023 20:29
    +3

    одинаковой размерности - т.е. матрицы, у которых совпадает кол-во строк и строчек
    А что насчёт строчечек?


  1. Tiriet
    07.07.2023 20:29
    +1

    Перемножить можно только те матрицы, если число столбцов матрицы A равно числу строк матрицы B. Если матрица A имеет размер (m*n), а матрица B имеет размер(k*n), то полученная матрица будет (m*n).

    m*k же должно быть. и матрица B должна иметь размер (n*k), перемножаются строка на столбец, размер строки первой матрицы (n) должен быть равен числу строк второй матрицы.


    1. stabuev
      07.07.2023 20:29

      Если А - m*k, B - k*n, то A*B - m*n

      А не вот это вот все :)

      Еще я не понял к чему в начале статьи система линейных уравнений?


      1. Tiriet
        07.07.2023 20:29
        +1

        Там по разному можно исправить ошибочные индексы. m•k x k•n = m•n или m•n x n•k = m•k. В любом разе в тексте косяк, который надо как-то починять.


  1. ArkadyTokaev
    07.07.2023 20:29

    Корректором меня возьмите. Статья — запутать новичка. m*k очевидно д.б. матрица.