Подтвердить что ты не робот

Обратная матрица с использованием numpy

Я хотел бы использовать numpy для вычисления обратного. Но я получаю сообщение об ошибке:

'numpy.ndarry' object has no attribute I

Чтобы вычислить обратную матрицу в numpy, скажем, матрицу M, она должна быть простой: print M.I

Здесь код:

x = numpy.empty((3,3), dtype=int)
for comb in combinations_with_replacement(range(10), 9):
   x.flat[:] = comb
   print x.I

Я предполагаю, что эта ошибка возникает из-за того, что x теперь плоский, поэтому команда "I" несовместима. Есть ли для этого работа?

Моя цель - распечатать ИНВЕРСУЮ МАТРИЦУ любой возможной комбинации числовых матриц.

4b9b3361

Ответ 1

Атрибут I существует только для объектов matrix, а не ndarray s. Вы можете использовать numpy.linalg.inv для инвертирования массивов:

inverse = numpy.linalg.inv(x)

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

try:
    inverse = numpy.linalg.inv(x)
except numpy.linalg.LinAlgError:
    # Not invertible. Skip this one.
    pass
else:
    # continue with what you were doing

Кроме того, если вы хотите пройти через все матрицы 3x3 с элементами, созданными из [0, 10), вы хотите следующее:

for comb in itertools.product(range(10), repeat=9):

а не combinations_with_replacement, или вы пропустите такие матрицы, как

numpy.array([[0, 1, 0],
             [0, 0, 0],
             [0, 0, 0]])

Ответ 2

Еще один способ сделать это - использовать класс numpy matrix (а не numpy array) и атрибут I Например:

>>> m = np.matrix([[2,3],[4,5]])
>>> m.I
matrix([[-2.5,  1.5],
       [ 2. , -1. ]])

Ответ 3

Обратная матрица с использованием python и numpy:

>>> import numpy as np
>>> b = np.array([[2,3],[4,5]])
>>> np.linalg.inv(b)
array([[-2.5,  1.5],
       [ 2. , -1. ]])

Не все матрицы могут быть инвертированы. Например, единичные матрицы не являются обратимыми:

>>> import numpy as np
>>> b = np.array([[2,3],[4,6]])
>>> np.linalg.inv(b)

LinAlgError: Singular matrix

Решение сингулярной матричной задачи:

попробуй поймать исключение Singular Matrix и продолжай, пока не найдешь преобразование, которое соответствует твоим предыдущим критериям И также обратимо.

Интуиция о том, почему матричное обращение не всегда может быть сделано; как в единичных матрицах:

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

Если я остановлю проекцию фильма на одном кадре, вы увидите пиксели пленки на стене, и я попрошу вас восстановить фильм на основе того, что вы видите. Это легко, вы говорите, просто возьмите обратную матрицу, которая выполнила проекцию. Обратная матрица - это обращение проекции.

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

Матрица, которая может использоваться для преобразования некоторых данных в другие данные, является обратимой, только если процесс может быть полностью изменен без потери информации. Если ваша матрица не может быть инвертирована, возможно, вы определяете свою проекцию, используя методику "угадай и проверь", а не процесс, который гарантирует преобразование без искажений.

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

Источник:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html#numpy.linalg.inv

Ответ 4

Как насчет inv?

например.:   my_inverse_array = inv (my_array)

Ответ 5

Инверсия х может быть просто рассчитана как,

1/х