作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为疾病风险模型的一部分,我试图从一篇论文(在 Python/numpy 中)实现计算,其中一部分是以下矩阵计算:
在哪里:
Qdiag <- lm.influence(lm(y ~ X-1, weights=W))$hat/W
m = 3
n = 20 # 500000 -- out of memory for large n
np.random.seed(123)
X = np.random.random((n,m))
W = np.random.random(n)
W = np.diag(W)
xtwx = X.T.dot(W.dot(X))
xtwxi = np.linalg.pinv(xtwx)
xtwxixt = xtwxi.dot(X.T)
Q = X.dot(xtwxixt)
Qdiag = np.diag(Q)
print Qdiag.shape, Qdiag.sum() # Checksum of output
print Qdiag
最佳答案
(在现已删除的评论中,我说这是不可能的,因为某些密度和硬件假设将其视为黑盒。但似乎可以做到。这并不意味着这是正确的方法!)
因此,在不分析这个公式的背景的情况下,我们可以在给定最小假设和经典规则的情况下做一些基本方法,例如:
import numpy as np
from time import perf_counter as pc # python 3 only
m = 200
n = 500000
np.random.seed(123)
X = np.random.random((n,m))
W_diag = np.random.random(n) # C -> dense vector
start_time = pc()
lhs = np.multiply(X.T, W_diag).dot(X) # C (+A)
x = np.linalg.solve(lhs, X.T) # B
# EDIT: Paul Panzer recommends the inverse in his comment based on the rhs-dims!
# if you know something about lhs (looks symmetric; maybe even PSD)
# use one of the following for speedups and more robustness
# i highly recommend this research: feels PSD
# import scipy.linalg as slin
# x = slin.solve(lhs, X.T, assume_a='sym')
# x = slin.solve(lhs, X.T, assume_a='pos')
Q_ = np.einsum('ij,ji->i', X,x) # D most important -> N*N elsewise
print(Q_)
end_time = pc()
print(end_time - start_time)
[ 0.00068103 0.00083676 0.00080945 ..., 0.00077864 0.00078945
0.0007804 ]
3.1077745566331165 # seconds
关于numpy - 高效计算帽子矩阵: inv(X'WX )'X' 的对角线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841790/
嗨,我正在为我的新树莓派 4 戴上 POE-FAN 帽子而苦苦挣扎。 使用官方 POE-HAT 安装了几个 Pi:https://www.raspberrypi.org/products/poe-ha
尝试在 R 中使用 adonis 执行 PERMANOVA。添加到我的数据表和因子中,但是,我不断收到示例错误 - G * t(hat) 中的错误:不一致性数组 没有 N/A 数据,它可以使用现成的数
我是一名优秀的程序员,十分优秀!