numpy - 有什么方法可以在 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?
解决方案
好吧,您可以使用 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
)。
推荐阅读
- javascript - 如何安装 CKEditor 5 自动保存插件?
- spring - 安装 Spring Cloud CLI - Spring boot 2.4.5 的哪个版本
- java - 如何在 Spring Java 中使用 resttemplate 在回调 URL 中将 @RequestBody 作为字符串传递
- css - 在 Devvn Image Hotspots 中关闭 CSS 属性
- azure - Azure 数据工厂使用两个集成运行时进行故障转移
- digital-ocean - kubectl 命令不断超时
- amazon-web-services - 如何在邮递员中使用 AWS 放大 API?
- java - Android Studio > 无法解析符号“layoutBg”> 无法解析符号“progressBar”
- android - 从 Activity 更新 UI 片段
- javascript - (React Hooks) Ref 方法不更新状态值