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

如何在Python中以最快的方式计算矩阵指数?,python,numpy,matrix,scipy,exponential,Python,Numpy,Matrix,Scipy,Exponential,我想用Python计算矩阵指数。 我找到了一种方法(“scipy.linalg.expm()”),但它需要很长时间(例如,5000×5000矩阵需要30秒) matrix\u index=scipy.linalg.expm(矩阵) 在Python中有没有更快的计算矩阵指数的方法 非常感谢您。我不确定这是否为时已晚,希望您已经找到答案 当我试图用大矩阵求解物理学中的随机Liouville方程时,我也面临着同样的问题。在我看来,在CPU上运行的scipy实现是最快的方法 到目前为止,我已经找到了两

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

matrix\u index=scipy.linalg.expm(矩阵)
在Python中有没有更快的计算矩阵指数的方法


非常感谢您。

我不确定这是否为时已晚,希望您已经找到答案

当我试图用大矩阵求解物理学中的随机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计算能力,但是没有现成的方法来运行矩阵求幂。与使用cupy的GPU相比,使用numpy的CPU上运行矩阵求逆也更快


上述测试是在具有Intel®Core的linux机器上运行的™ i5-9400F CPU@2.90GHz×6和GeForce GTX 1050 Ti/PCIe/SSE2,使用大小介于243和12393之间的稀疏矩阵,基于128位numpy复数。使用scipy.linalg.expm(a)对5000x5000平方矩阵(64位浮点)求幂需要22秒。不确定这是否有帮助,但CuPy对矩阵求幂有GPU支持,我相信这肯定没有帮助。。。买一台Mac电脑,我的在24秒内完成:-):-):-)一般情况下可能不会。在特殊情况下。大概矩阵是厄米人吗?大家好。谢谢你的回复。我使用Windows。不幸的是我没有苹果。矩阵不是厄米矩阵。我试试丘比。(虽然我现在正努力在PyCharm中使用CuPy。)如果有人知道其他方法,我很高兴听到这个消息。谢谢。如果您已经知道要将指数化矩阵应用于哪个其他矩阵或向量,可以使用
scipy.sparse.linalg.expm\u multiply
,这会更快。