【发布时间】:2022-01-26 19:16:43
【问题描述】:
我正在尝试在 python 中计算“帽子矩阵”。我正在使用以下公式。当 X 的长度很大(比如 60,000)时,我会遇到内存不足的问题。 H = X*inv(X'X)*X'
有没有一种计算上更有效的方法来做到这一点?代码片段如下
import numpy as np
X = np.random.rand(60000,1)
hat = X.dot(np.linalg.inv(X.T.dot(X)).dot(X.T))
【问题讨论】:
-
我没有任何解决方案,但对于初学者,您是否考虑过如果使用 float64 (
60_000**2 * 8 / 1e9),hat矩阵的大小将是 28.8GB。也许你可以看看使用 SciPy 稀疏矩阵 -
你确定你需要明确的矩阵吗?人们通常可以在不明确形成对象的情况下求解线性系统,例如,使用
np.linalg.solve。 -
我不喜欢测试内存错误,但如果我解决了这个问题,我会开始逐步评估它,以便清楚地了解错误出现的位置。换句话说,以
X.T.dot(X)开头。然后是inv,以此类推。但简单地估计每一步的数组大小可能就足够了。 -
可能存在特定类型的矩阵 X,例如疏。您需要分享您对 X 的所有了解,以便人们能够提供帮助。 Bnaecker 的问题非常中肯:你真的需要所有的帽子矩阵吗?做什么的?例如,如果您只需要不需要计算帽子矩阵的状态向量,并且这样做确实可能会失去准确性。
标签: python numpy linear-algebra