首页 > 解决方案 > 有什么方法可以在 NumPy 中获取矩阵的 sqrt 吗?不是元素明智,而是作为一个整体

问题描述

例如,对于矩阵 A,我们有

A.dot(A) = B

现在我有B,想得到A。我试过np.sqrt(B)了,但这只能得到每个数字的sqrt是B,而不是A。我搜索了互联网,但一无所获。

有没有办法在 NumPy 中获得 A?

例如

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?

标签: numpy

解决方案


好吧,您可以使用 scipy 来完成

但是,如果你想用 numpy 来做,那么我认为你最好的猜测是对矩阵进行对角化,然后计算内部对角矩阵的平方根。

# 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)

请注意,如果您的矩阵是对称实数矩阵,则可以加快计算速度(使用np.eigh并且您不必计算逆矩阵,因为它是 的转置evectors)。


推荐阅读