You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

滑动窗口SVD增量计算实现问询(基于前窗口SVD结果,无低秩近似)

滑动窗口SVD增量计算实现问询(基于前窗口SVD结果,无低秩近似)

各位好,我用Python的符号体系来描述我的问题:

假设我有一个形状为 (p, nb) 的矩阵 A,现在用滑动窗口截取它的子矩阵:取 p 行、n 列的子矩阵 Am = A[:, m : m + n],然后对这个子矩阵做奇异值分解(SVD):

U_m, S_m, Vh_m = svd(Am) = svd(A[:, m:m+n])

接下来滑动到下一个窗口 m+1,对应的子矩阵是 Am1 = A[:, m+1:m+1+n],同样需要计算它的SVD:

U_m1, S_m1, Vh_m1 = svd(Am1) = svd(A[:, m+1:m+1+n])

从头计算完整SVD的时间复杂度是 O(min(p*n², n*p²)),我希望能利用前一个窗口(m窗口)的SVD结果(U_m, S_m, Vh_m)来计算下一个窗口(m+1窗口)的SVD,而不是从头开始计算,以此降低复杂度、提升效率。另外我不想做低秩近似,假设 rank(Am) = min(p, n)。

理想中的调用形式大概是这样的:

U_m1, S_m1, Vh_m1 = sliding_svd(U_m, S_m, Vh_m, A[:,m+1:m+1+n], A[:,m], A[:,m+n])

这类问题和增量SVD类似,但我更愿意称之为滑动窗口SVD、移动SVD。我之前在数学相关社区问过类似问题,现在想请教大家:有没有可以用NumPy和SciPy实现的代码方案?或者有没有相关的论文可以参考?如果能给一些实现思路的指引也非常感谢!

备注:内容来源于stack exchange,提问作者Triceratops

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:04:32