#python #arrays #numpy #scipy #sympy
#python #массивы #numpy #scipy #симпатия
Вопрос:
Я пытаюсь найти обратную этому, но numpy, похоже, находит только обратные значения для чисел. Я alpha
не равен нулю.
Как мне это сделать?
from sympy import *
import numpy as np
import scipy.linalg
A = np.array([[1,2,3],[2,2,3],[3,4,5]])
B = np.array([[1,0,3],[8,2,3],[3,9,5]])
alpha = symbols('a')
K = A - alpha*B
print(np.linalg.inv(K))
Ответ №1:
Вы правы, функция NumPy inv
ожидает числовой ввод. Документация SymPy об основных методах для объекта SymPy Matrix гласит: «Чтобы найти обратную матрицу, просто возведите ее в степень -1».
Итак…
from sympy import *
import numpy as np
import scipy.linalg
A = np.array([[1,2,3],[2,2,3],[3,4,5]])
B = np.array([[1,0,3],[8,2,3],[3,9,5]])
alpha = symbols('a')
K = A - alpha*B
M = Matrix(K)
print("M:")
print(repr(M))
print()
print("inv(M):")
print(repr(M**-1))
Вывод:
M:
Matrix([
[ 1 - a, 2, 3 - 3*a],
[2 - 8*a, 2 - 2*a, 3 - 3*a],
[3 - 3*a, 4 - 9*a, 5 - 5*a]])
inv(M):
Matrix([
[ (17*a - 2)/(181*a**2 - 33*a 2), -(27*a - 2)/(181*a**2 - 33*a 2), 6*a/(181*a**2 - 33*a 2)],
[ (31*a - 1)/(181*a**2 - 33*a 2), (4*a - 4)/(181*a**2 - 33*a 2), -(21*a - 3)/(181*a**2 - 33*a 2)],
[-(66*a**2 - 38*a 2)/(181*a**3 - 214*a**2 35*a - 2), (9*a 2)/(181*a**2 - 33*a 2), -(2*a**2 12*a - 2)/(181*a**3 - 214*a**2 35*a - 2)]])
Как отметил @OscarBenjamin в комментарии, вы также можете использовать этот inv
метод, т.е. M.inv()
.
Комментарии:
1. Симпатическая матрица также имеет
inv
метод, т.Е.M.inv()
для обратного.