例如,对于矩阵 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?
好吧,你可以使用 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)。