更快的矩阵-向量乘法 (MVM),如果矩阵元素是动态计算的



我目前正在做一个项目,我必须使用Lanczos算法计算极值特征值。我替换了 MVM,以便即时计算矩阵元素,因为我必须计算真实巨大矩阵的特征值。这减慢了我的代码速度,因为在python thand MVM中for循环速度较慢。有什么方法可以简单地改进我的代码吗?我尝试使用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产品期间进行更多优化,而无需进行重大代码修改。

相关内容

  • 没有找到相关文章

最新更新