Есть ли способ получить sqrt матрицы в NumPy? Не стихийно, а в целом - PullRequest
0 голосов
/ 17 апреля 2020

Например, для матрицы A у нас есть

A.dot(A) = B

Теперь у меня есть B, хочу получить A. Я пробовал np.sqrt(B), но это может только получить sqrt каждого числа - B, а не A. Я искал inte rnet, но ничего не нашел.

Есть ли способ получить A в NumPy?

Например

import numpy as np
ar = np.random.randint(low=1, high=5, size=(4,4))
ar2 = ar.dot(ar)
ar1 = np.sqrt(ar2)

Тогда мы обнаружим, что ar1 не совпадает с ar. Если мы теперь знаем ar2, как мы можем получить ar?

1 Ответ

1 голос
/ 17 апреля 2020

Ну, вы можете сделать это , используя scipy .

Однако, если вы хотите сделать это с numpy, тогда я думаю, что вам лучше всего сделать диагонализацию вашей матрицы, а затем чтобы вычислить квадрат root внутренней диагональной матрицы.

# Computing diagonalization
evalues, evectors = np.linalg.eig(a)
# Ensuring square root matrix exists
assert (evalues >= 0).all()
sqrt_matrix = evectors @ np.diag(np.sqrt(evalues)) @ np.linalg.inv(evectors)

Обратите внимание, что вы можете ускорить вычисления, если ваша матрица симметрична c вещественная (используйте np.eigh и вам не нужно вычислить обратное, поскольку оно является транспонированным из evectors).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...