是否有人知道并行精确矩阵对角化的实现版本(可能使用scipy / numpy)(等效地,找到本征系统)?如果它有帮助,我的矩阵是对称的和稀疏的。我不想花一天时间重新发明轮子。
编辑:
我的矩阵至少10,000x10,000(但最好至少大20倍)。目前,我只能访问4核Intel机器(具有超线程,每个核心2个进程),每个带有12GB RAM的~3.0Ghz。我以后可以访问128核节点~3.6Ghz /核心,256GB内存,所以单机/多核应该这样做(对于我的其他并行任务,我一直在使用multiprocessing
)。我更希望算法能够很好地扩展。
我确实需要精确的对角线化,因此scipy.sparse
例程对我不利(尝试过,效果不好)。我一直在使用numpy.linalg.eigh
(我看到只有单核执行所有计算)。
或者(对于原始问题):是否有在线资源,我可以找到更多关于编译SciPy的信息,以确保并行执行?
答案 0 :(得分:1)
对于对称稀疏矩阵特征值/特征向量发现,您可以使用scipy.sparse.linalg.eigsh
。它在幕后使用ARPACK,并且存在并行ARPACK实现。如果您的scipy安装使用串行版本,则可以使用AFAIK编译SciPy。
然而,如果您需要矩阵的所有特征值和特征向量,这不是一个好的答案,因为稀疏版本使用Lanczos算法。
如果您的矩阵不是非常大,那么只需使用numpy.linalg.eigh
。它使用LAPACK或BLAS,可以在内部使用并行代码。
如果您最终自己滚动,请注意SciPy / NumPy使用不同的高度优化的线性代数包完成所有繁重的工作,而不是纯Python。因此,并行性的性能和程度在很大程度上取决于编译SciPy / NumPy安装的库。
(你的问题并没有揭示你是否只想在多个处理器或几台计算机上运行并行代码。而且,矩阵的大小对最佳方法有很大影响。所以,这个答案可能完全是现成的标记。)