有什么方法可以在NumPy中得到矩阵的平方吗?不是元素方面的,而是作为整体

3htmauhk  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(146)

例如,对于矩阵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呢?

zlwx9yxi

zlwx9yxi1#

你可以用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的转置,所以不必计算逆矩阵)。

相关问题