有什么方法可以在 NumPy 中获取矩阵的 sqrt 吗?不是从元素角度,而是从整体角度

jet*_*orz 4 numpy

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

A.dot(A) = B

现在我有B,想得到A。我尝试过np.sqrt(B),但这只能得到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)
Run Code Online (Sandbox Code Playgroud)

然后我们会发现ar1和ar不一样。如果我们现在知道 ar2,我们怎样才能得到 ar?

Tri*_*moz 7

好吧,你可以使用 scipy来做到这一点。

但是,如果您想使用 numpy 来完成此操作,那么我认为您最好的猜测是将矩阵对角化,然后计算内部对角矩阵的平方根。

# Computing diagonalization
evalues, evectors = np.linalg.eig(a)
# Ensuring square root matrix exists
assert (evalues >= 0).all()
sqrt_matrix = evectors * np.sqrt(evalues) @ np.linalg.inv(evectors)
Run Code Online (Sandbox Code Playgroud)

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