Как найти обратную матрицу python

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    The inverse of a matrix is just a reciprocal of the matrix as we do in normal arithmetic for a single number which is used to solve the equations to find the value of unknown variables. The inverse of a matrix is that matrix which when multiplied with the original matrix will give as an identity matrix. The inverse of a matrix exists only if the matrix is non-singular i.e., determinant should not be 0. Using determinant and adjoint, we can easily find the inverse of a square matrix using below formula,

    if det(A) != 0
        A-1 = adj(A)/det(A)
    else
        "Inverse doesn't exist"  
    

    Matrix Equation

    Ax = B\ =>A^{-1}Ax = A^{-1}B\ =>x = A^{-1}B

    where,

    A-1: The inverse of matrix A

    x: The unknown variable column

    B: The solution matrix

    We can find out the inverse of any square matrix with the function numpy.linalg.inv(array). 

    Syntax: numpy.linalg.inv(a)

    Parameters:

    a: Matrix to be inverted

    Returns: Inverse of the matrix a.

    Example 1:

    Python3

    import numpy as np

    arr = np.array([[1, 2], [5, 6]])

    inverse_array = np.linalg.inv(arr)

    print("Inverse array is ")

    print(inverse_array)

    print()

    arr = np.array([[1, 2, 3], 

                    [4, 9, 6], 

                    [7, 8, 9]])

    inverse_array = np.linalg.inv(arr)

    print("Inverse array is ")

    print(inverse_array)

    print()

    arr = np.array([[1, 2, 3, 4], 

                    [10, 11, 14, 25],

                    [20, 8, 7, 55], 

                    [40, 41, 42, 43]])

    inverse_array = np.linalg.inv(arr)

    print("Inverse array is ")

    print(inverse_array)

    print()

    arr = np.array([[1]])

    inverse_array = np.linalg.inv(arr)

    print("Inverse array is ")

    print(inverse_array)

    Output:

    Inverse array is 
    [[-1.5   0.5 ]
     [ 1.25 -0.25]]
    
    Inverse array is 
    [[-0.6875     -0.125       0.3125    ]
     [-0.125       0.25       -0.125     ]
     [ 0.64583333 -0.125      -0.02083333]]
    
    Inverse array is 
    [[-15.07692308   4.9         -0.8         -0.42307692]
     [ 32.48717949 -10.9          1.8          1.01282051]
     [-20.84615385   7.1         -1.2         -0.65384615]
     [  3.41025641  -1.1          0.2          0.08974359]]
    
    Inverse array is 
    [[1.]]
    

    Example 2:

    Python3

    import numpy as np 

    A = np.array([[[1., 2.], [3., 4.]], 

                  [[1, 3], [3, 5]]]) 

    print(np.linalg.inv(A))

    Output:

    [[[-2.    1.  ]
      [ 1.5  -0.5 ]]
    
     [[-1.25  0.75]
      [ 0.75 -0.25]]]
    

    Last Updated :
    26 Feb, 2021

    Like Article

    Save Article

    Пятый урок посвящен нахождению обратной матрицы, ее свойствам, а также определению ранга матрицы

    • Обратная матрица
    • Ранг матрицы

    Обратная матрица

    Обратной матрицей A-1 матрицы A называют матрицу, удовлетворяющую следующему равенству:

    где – E это единичная матрица.

    Для того, чтобы у квадратной матрицы A была обратная матрица необходимо и достаточно чтобы определитель |A| был не равен нулю. Введем понятие союзной матрицы. Союзная матрица A* строится на базе исходной A путем замены всех элементов матрицы A на их алгебраические дополнения.

    Исходная матрица:

    Союзная ей матрица A*:

    Транспонируя матрицу A*, мы получим так называемую присоединенную матрицу A*T:

    Теперь, зная как вычислять определитель и присоединенную матрицу, мы можем определить матрицу A-1, обратную матрице A:

    ➣ Численный пример

    Пример вычисления обратной матрицы. Пусть дана исходная матрица A, следующего вида:

    Для начала найдем определитель матрицы A:

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

    Союзная матрица будет иметь следующий вид:

    Присоединенная матрица получается из союзной путем транспонирования:

    Находим обратную матрицу:

    ➤ Пример на Python

    Решим задачу определения обратной матрицы на Python. Для получения обратной матрицы будем использовать функцию inv():

    >>> A = np.matrix('1 -3; 2 5')
    >>> A_inv = np.linalg.inv(A)
    >>> print(A_inv)
    [[ 0.45454545 0.27272727]
     [-0.18181818 0.09090909]]

    Рассмотрим свойства обратной матрицы.

    Свойство 1. Обратная матрица обратной матрицы есть исходная матрица:

    ➤Пример на Python

    >>> A = np.matrix('1. -3.; 2. 5.')
    >>> A_inv = np.linalg.inv(A)
    >>> A_inv_inv = np.linalg.inv(A_inv)
    
    >>> print(A)
    [[1. -3.]
     [2. 5.]]
    >>> print(A_inv_inv)
    [[1. -3.]
     [2. 5.]]

    Свойство 2. Обратная матрица транспонированной матрицы равна транспонированной матрице от обратной матрицы:

    ➤ Пример на Python

    >>> A = np.matrix('1. -3.; 2. 5.')
    >>> L = np.linalg.inv(A.T)
    >>> R = (np.linalg.inv(A)).T
    
    >>> print(L)
    [[ 0.45454545 -0.18181818]
     [ 0.27272727 0.09090909]]
    >>> print(R)
    [[ 0.45454545 -0.18181818]
     [ 0.27272727 0.09090909]]

    Свойство 3. Обратная матрица произведения матриц равна произведению обратных матриц:

    ➤ Пример на Python

    >>> A = np.matrix('1. -3.; 2. 5.')
    >>> B = np.matrix('7. 6.; 1. 8.')
    
    >>> L = np.linalg.inv(A.dot(B))
    >>> R = np.linalg.inv(B).dot(np.linalg.inv(A))
    
    >>> print(L)
    [[ 0.09454545 0.03272727]
     [-0.03454545 0.00727273]]
    >>> print(R)
    [[ 0.09454545 0.03272727]
     [-0.03454545 0.00727273]]

    Ранг матрицы

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

    Вычислим ранг матрицы с помощью Python. Создадим единичную матрицу:

    >>> m_eye = np.eye(4)
    >>> print(m_eye)
    [[1. 0. 0. 0.]
     [0. 1. 0. 0.]
     [0. 0. 1. 0.]
     [0. 0. 0. 1.]]

    Ранг такой матрицы равен количеству ее столбцов (или строк), в нашем случае ранг будет равен четырем, для его вычисления на Python воспользуемся функцией matrix_rank():

    >>> rank = np.linalg.matrix_rank(m_eye)
    >>> print(rank)
    4

    Если мы приравняем элемент в нижнем правом углу к нулю, то ранг станет равен трем:

    >>> m_eye[3][3] = 0
    >>> print(m_eye)
    [[1. 0. 0. 0.]
     [0. 1. 0. 0.]
     [0. 0. 1. 0.]
     [0. 0. 0. 0.]]
    
    >>> rank = np.linalg.matrix_rank(m_eye)
    >>> print(rank)
    3

    P.S.

    Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
    Книга: Линейная алгебра на Python
    Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas.  Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
    Книга: Pandas. Работа с данными

    linalg.inv(a)[source]#

    Compute the (multiplicative) inverse of a matrix.

    Given a square matrix a, return the matrix ainv satisfying
    dot(a, ainv) = dot(ainv, a) = eye(a.shape[0]).

    Parameters:
    a(…, M, M) array_like

    Matrix to be inverted.

    Returns:
    ainv(…, M, M) ndarray or matrix

    (Multiplicative) inverse of the matrix a.

    Raises:
    LinAlgError

    If a is not square or inversion fails.

    Notes

    New in version 1.8.0.

    Broadcasting rules apply, see the numpy.linalg documentation for
    details.

    Examples

    >>> from numpy.linalg import inv
    >>> a = np.array([[1., 2.], [3., 4.]])
    >>> ainv = inv(a)
    >>> np.allclose(np.dot(a, ainv), np.eye(2))
    True
    >>> np.allclose(np.dot(ainv, a), np.eye(2))
    True
    

    If a is a matrix object, then the return value is a matrix as well:

    >>> ainv = inv(np.matrix(a))
    >>> ainv
    matrix([[-2. ,  1. ],
            [ 1.5, -0.5]])
    

    Inverses of several matrices can be computed at once:

    >>> a = np.array([[[1., 2.], [3., 4.]], [[1, 3], [3, 5]]])
    >>> inv(a)
    array([[[-2.  ,  1.  ],
            [ 1.5 , -0.5 ]],
           [[-1.25,  0.75],
            [ 0.75, -0.25]]])
    

    In this article, we will see NumPy Inverse Matrix in Python before that we will try to understand the concept of it. The inverse of a matrix is just a reciprocal of the matrix as we do in normal arithmetic for a single number which is used to solve the equations to find the value of unknown variables. The inverse of a matrix is that matrix which when multiplied with the original matrix will give an identity matrix. 

    The inverse of a matrix exists only if the matrix is non-singular i.e., the determinant should not be 0. Using determinant and adjoint, we can easily find the inverse of a square matrix using the below formula,

    if det(A) != 0
        A-1 = adj(A)/det(A)
    else
        "Inverse doesn't exist"  

    Matrix Equation:

    =>Ax = B\ =>A^{-1}Ax = A^{-1}B\ =>x = A^{-1}B

    where,

    A-1: The inverse of matrix A

    x: The unknown variable column

    B: The solution matrix

    Inverse Matrix using NumPy

    Python provides a very easy method to calculate the inverse of a matrix. The function numpy.linalg.inv() is available in the NumPy module and is used to compute the inverse matrix in Python.

    Syntax: numpy.linalg.inv(a)

    Parameters:

    • a: Matrix to be inverted

    Returns:  Inverse of the matrix a.

    Example 1: In this example, we will create a 3 by 3 NumPy array matrix and then convert it into an inverse matrix using the np.linalg.inv() function.

    Python3

    import numpy as np

    A = np.array([[6, 1, 1],

                  [4, -2, 5],

                  [2, 8, 7]])

    print(np.linalg.inv(A))

    Output:

    [[ 0.17647059 -0.00326797 -0.02287582]
     [ 0.05882353 -0.13071895  0.08496732]
     [-0.11764706  0.1503268   0.05228758]]

    Example 2: In this example, we will create a 4 by 4 NumPy array matrix and then convert it using np.linalg.inv() function into an inverse Matrix in Python.

    Python3

    import numpy as np

    A = np.array([[6, 1, 1, 3],

                  [4, -2, 5, 1],

                  [2, 8, 7, 6],

                  [3, 1, 9, 7]])

    print(np.linalg.inv(A))

    Output:

    [[ 0.13368984  0.10695187  0.02139037 -0.09090909]
     [-0.00229183  0.02673797  0.14820474 -0.12987013]
     [-0.12987013  0.18181818  0.06493506 -0.02597403]
     [ 0.11000764 -0.28342246 -0.11382735  0.23376623]]

    Example 3: In this example, we will create multiple NumPy array matrices and then convert them into their inverse matrices using np.linalg.inv() function.

    Python3

    import numpy as np

    A = np.array([[[1., 2.], [3., 4.]],

                  [[1, 3], [3, 5]]])

    print(np.linalg.inv(A))

    Output:

    [[[-2.    1.  ]
      [ 1.5  -0.5 ]]
    
     [[-1.25  0.75]
      [ 0.75 -0.25]]]

    Last Updated :
    05 May, 2023

    Like Article

    Save Article

    Доброго времени суток! Сегодня поговорим об обратных матрицах и транспонировании.

    Описание матриц, я давал в другой своей статье, умножение матриц: https://dzen.ru/a/Y-yDOz7fkwLABh5Q

    Обратной для матрицы A называют матрицу A^{-1}, которая удовлетворяет условию

    AA^{-1}=A^{-1}A=E.

    По определению обратной матрицы AA^{-1}=A^{-1}A=E, то есть матрица и обратная ей являются перестановочными. Значит, обратные матрицы существуют только для квадратных. Поэтому преобразование вектора из плоскости в пространство необратимо: матрица такого преобразования будет прямоугольной.

    Обратные матрицы, как и обратные числа, заменяют собой операцию деления. Вместо деления на 5 можно умножить на обратное число 0.2. А вместо деления на матрицу — умножить на обратную матрицу.

    У любого ненулевого числа есть всего одно, обратное ему. Точно так же дела обстоят и с матрицами.

    У матрицы может быть не более одной обратной.

    Вычисление обратной матрицы в коде.

    Поиск обратной матрицы — трудоёмкое дело. Даже для матриц 2×2 нужен алгоритм в несколько действий, а в реальных задачах матрицы намного крупнее.

    Поэтому сейчас мы будем вычислять обратные матрицы в Python.

    Вычислим обратную для матрицы (-7 8

    2 31)

    Нам понадобится функция np.linalg.inv(a), где a — исходная матрица. Чтобы проверить, действительно ли получилась обратная матрица, а не хаотичный набор чисел, применим матричное произведение.

    Пример получения обратной матрицы с проверкой
    Пример получения обратной матрицы с проверкой
    Получившийся результат
    Получившийся результат

    Теперь возьмём матрицу побольше: ( 9 -7 15

    6 3 29

    0 3 7 )

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

    Вместо единичной матрицы получилось что-то странное, но мы всё объясним.

    Дело в том, что все десятичные дроби код выводит в экспоненциальном виде. Это представление числа в виде произведения мантиссы, то есть числа не меньше 1 и не больше 10, и экспоненты — степени десятки, которая отделяется от мантиссы буквой e.

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

    Вот что получится для матрицы ( 9 -7 15

    6 3 29

    0 3 7 )

    Пример вычисления обратной матрицы в коде
    Пример вычисления обратной матрицы в коде
    Результат вычислений
    Результат вычислений

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

    Свойства обратных матриц

    Несколько свойств обратных матриц мы уже определили:

    1. AA^{-1}=A^{-1}A=E— коммутативность произведения матрицы и обратной ей;
    2. Обратная матрица определяется единственным образом;
    3. (AB)^{-1}=B^{-1}A^{-1}— расчёт матрицы, обратной произведению.

    А вот и все остальные.

    1. Матрица, обратная обратной

    Если A обратима, то A^{-1} также обратима, причём (A^{-1})^{-1}=A.

    Для примера возьмём матрицу растяжения ( 2 0

    0 2).

    Обратная ей матрица сжимает вектор в 2 раза: (0.5 0

    0 0.5).

    Преобразование, обратное сжатию, — это растяжение. Матрица, обратная сжатию вектора в 2 раза, будет в 2 раза его растягивать. Это снова матрица:
    ( 2 0

    0 2).

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

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

    (A^−1)^T=(A^T)^−1

    Вычислим в коде левую и правую части для матрицы сдвига: (1 4

    0 1)

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

    Здесь используется библиотека numpy. Она подключается оператором import -“import numpy as np”.

    Для того чтобы , библиотека numpy заработала необходимо установить ее сначала , командой pip install numpy и убедитесь , что используете последнюю версию Python. Команду необходимо вводить в cmd.exe.

    В других ОС, существуют подобные командные строки, я работаю в операционной системе Windows.

    Чтобы запустить этот код в среде разработки Python нужно в меню выбрать пункт File->New File, в появившемся окне набрать код или скопировать его туда, проверить ошибки, в меню появившегося окна выбрать Run->Run Module, программа выполнится.

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

    Даю ссылку на другую мою статью, про умножение матриц:

    https://dzen.ru/media/id/5f572502b7204709f04ab67c/primer-umnojeniia-matric-v-python-63ec833b3edf9302c0061e50

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