如何在Python中以最快的方式计算矩阵指数?

问题描述 投票:1回答:1

我想在Python中计算矩阵指数,我找到了一种方法("scipy.linalg.expm()"),但它需要很长的时间(例如5000×5000矩阵的30[秒])。

matrix_exponential = scipy.linalg.expm(matrix)

有没有更快的方法在Python中计算矩阵指数?

先谢谢你了。

python numpy matrix scipy exponential
1个回答
0
投票

不知道是不是太晚了,希望你已经找到了答案。

我在试图解决物理学中大矩阵尺寸的随机Liouville方程时,也遇到了同样的问题。在我看来,在CPU上运行的scipy实现是最快的方法。

到目前为止,我发现有两个现成的软件包。一个是scipy linalg库(scipy.linalg.expm(A)),另一个是tensorflow linalg库(tf.linalg.expm(A))。如果安装了相应的cuda库,Tensorflow会使用GPU进行计算。这两个库都可以在不大幅度改变代码结构的情况下被纳入。tensorflow包需要在numpy数组和tensorflow数组之间进行转换。这些操作涉及到在系统RAM和GPU内存之间复制数据,往往很昂贵。

对于大小在12393以下的平方矩阵,两个包运行expm()函数的时间是一样的,但tensorflow代码在numpy和tf数组之间转换时,需要更长的IO时间,整体上比较慢。

CuPy也提供了GPU计算能力,然而没有现成的方法来运行矩阵指数。矩阵反演在CPU上运行numpy也比在GPU上运行CuPy快。

以上测试是在linux机器上运行的,CPU为Intel® Core™ i5-9400F @ 2.90GHz × 6,GeForce GTX 1050 TiPCIeSSE2,使用大小在243和12393之间的稀疏矩阵,基于128位numpy复数。使用scipy.linalg.expm(A),在6个核心上对一个5000x5000的正方形矩阵(64位浮点数)进行指数化需要22秒。

© www.soinside.com 2019 - 2024. All rights reserved.