为了简化模型,我想计算与矩阵最大20个奇异值相关的左奇异矢量,其中和。不幸的是,我的矩阵将是稠密的,没有任何结构。 Ñ ≈ 10 6 ķ ≈ 10 3甲
如果我只是svd
从numpy.linalg
Python模块中的例程中调用该大小的随机矩阵,则会遇到内存错误。这是由于的分配用于分解。甲= V 小号ù
周围有避免这种陷阱的算法吗?例如,通过仅建立与非零奇异值关联的奇异矢量。
我准备在计算时间和准确性上进行交易。
full_matrices
设置为False 的选项,以便仅计算“非零”部分。但是,有没有办法进一步减少计算量呢?
numpy
后端使用Fortran代码,在 LAPACKE_dgesvd
常规标准SVD。但是,通常您的矩阵是C_CONTIGOUS
(检查matrix.flags
)。因此,它将复制数据以进行fortran对齐。此外,在运行lapack例程dgesvd时,还需要矩阵的另一个副本(或者至少是它的内存)。如果确保从一开始就确保内存对齐为fortran样式,则可以删除一个副本。