繁体   English   中英

如果矩阵元素是即时计算的,则矩阵向量乘法 (MVM) 更快

[英]Faster Matrix-Vector-Multiplication (MVM) if the matrix elements are computed on-the-fly

我目前正在做一个项目,我必须使用 Lanczos 算法计算极值特征值。 我替换了 MVM,以便动态计算矩阵元素,因为我将不得不计算真实巨大矩阵的特征值。 这会减慢我的代码速度,因为 Python 中的 for 循环比 MVM 慢。 有什么方法可以简单地改进我的代码吗? 我尝试使用 Cython,但我在这里没有真正的运气。

for i in range(0,dim):
        for j in range(0,dim):
            temp=get_Matrix_Element(i,j)
            ws[i]=ws[i]+temp*v[j]

这取代了:

ws = M.dot(v)

更新,atrix M 是稀疏的,可以使用 scipy.sparse 以稀疏矩阵格式为“小型”系统存储。 对于高达 ~10^9 维的大型系统,我需要即时计算矩阵元素

最简单快速的实施解决方案是半途而废:一次预计算一行。

在您的原始解决方案( M.dot(v) )中,您必须存储呈二次方增长的dim x dim 如果您预先计算一行,它会线性缩放并且不会给您带来麻烦(因为您已经存储了相同大小的合成向量ws )。

代码应该是这样的:

for i in range(0,dim):
    temp=get_Matrix_Row(i)
        ws[i]=temp.dot(v)

其中temp现在是一个dim x 1向量。

这种修改应该允许在dot积期间进行更多优化,而无需对代码进行重大修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM