稀疏厄米矩阵的Python LDLT分解,有吗?

稀疏厄米矩阵的Python LDLT分解,有吗?,python,matrix,parallel-processing,sparse-matrix,Python,Matrix,Parallel Processing,Sparse Matrix,我有一些大的(N=10000到N=36000000)稀疏、复杂的厄米矩阵,通常是非奇异的,我有一个光谱切片问题。具体来说,我需要知道正特征值的确切数目 我需要一个稀疏的LDLT分解——有吗?理想情况下,它将是一个多前沿算法,并行性很好,可以选择只计算D矩阵,而不计算上三角矩阵或置换矩阵 我目前在Matlab中使用ldl()。这只适用于实矩阵,所以我需要创建一个更大的实矩阵。而且,它总是计算L和D。我需要一个更好的算法来适应64GB的RAM。我希望Python将更加可定制。(如果是这样,我将学习P

我有一些大的(N=10000到N=36000000)稀疏、复杂的厄米矩阵,通常是非奇异的,我有一个光谱切片问题。具体来说,我需要知道正特征值的确切数目

我需要一个稀疏的LDLT分解——有吗?理想情况下,它将是一个多前沿算法,并行性很好,可以选择只计算D矩阵,而不计算上三角矩阵或置换矩阵

我目前在Matlab中使用
ldl()
。这只适用于实矩阵,所以我需要创建一个更大的实矩阵。而且,它总是计算L和D。我需要一个更好的算法来适应64GB的RAM。我希望Python将更加可定制。(如果是这样,我将学习Python。)我应该补充一点:每个节点可以获得64GB的RAM,并且可以获得6个节点。即使是一台有64GB内存的机器,我也不想再浪费内存,只为了删除它而存储L

也许有人为腮腺炎编写了Python前端(多前端大规模并行求解器)

我会使用非并行Python版本的LDLT,因为我的许多研究涉及许多中等大小的矩阵

我需要一个更好的算法来适应64GB内存。我希望Python能够更加定制。(如果是这样,我将学习Python。)

如果可能的话:

|>>> ( 2. * 8 ) * 10E3 ** 2 / 1E12            # a 64GB RAM can store matrices ~1.6 GB
0.0016                                        #        the [10k,10k] of complex64
|                                             #        or  [20k,20k] of    real64
|>>> ( 2. * 8 ) * 63E3 ** 2 / 1E12            # a 64GB RAM can store matrices in-RAM
0.063504                                      #        max [63k,63k] of type complex
|                                             #        but
|>>> ( 2. * 8 ) * 36E6 ** 2 / 1E12            #        the [36M,36M] one has
20736.0                                       # ~ 21PB of data
+0:00:09.876642                               #        Houston, we have a problem
#---------------------------------------------#--------and [2M7,2M7] has taken    
                                                                   ~ month
                                                                  on HPC cluster
研究需求是明确的,但没有这样的语言(无论是Matlab、Python、汇编语言、Julia还是LISP)能够将21 PB的数据存储到只有64 GB物理RAM存储的空间中,以使(如此给定规模的)复杂矩阵特征值计算尽可能快。我的意思是,将数据从内存计算中“卸载”到任何形式的内存外存储中是如此昂贵(大约要慢+1E2+1E5个数量级),以至于任何这样的计算过程都会产生只需首次“读取”21pb元素数据的年龄

如果您的研究有资金或赞助使用非常特定的计算设备基础设施,可能会有一些技巧来处理这些数字堆,但不要期望在64 GB的大(好的,相当小的)罐子中“免费”接收21 PB的蠕虫(数据)

您可能出于许多其他原因和/或动机而喜欢Python,但这并不是因为HPC级别的并行计算更便宜、更快,也不是因为在64GB的设备内轻松处理21PB的数据,也不是因为任何形式的消除主要和巨大的
[时间]
-稀疏矩阵操作的域附加成本可见,但在计算过程中使用。由于某些xTB稀疏矩阵处理可以在1E2[min]而不是2E3内产生结果,我敢说我知道同时增加
[PSPACE]
-数据缩放和缩短通常
[EXPTIME]
处理持续时间是多么困难。。。计算复杂性真正的地狱角落
。。。稀疏矩阵表示法通常会比至少享受一些潜在的
[PSPACE]
节约带来更多的麻烦(同样,无论是在
[SPACE]
还是更糟糕的
[TIME]
,因为新的惩罚类型出现)

考虑到参数的范围,我可以放心地打赌,即使是算法部分也不会有帮助,甚至量子计算设备的承诺也将在我们的预期寿命内无法在任何合理的时间内将如此巨大的参数空间扩展到基于QC退火机的非结构化量子驱动最小化器(处理)(短时间)参数块序列转换为(有限物理尺寸)量子位场问题增强过程,由于LLNL等人的研究创新,QC社区目前正在使用该过程

对不起,附近似乎没有这样的魔法

使用流行性腮腺炎可用的python前端不会改变游戏的HPC问题,但是如果你想使用它,是的,有几种可用的

高效的HPC级大规模数字处理仍然是[processing time]x[(无论什么)数据表示的高效存储和检索]产品问题的根本原因


希望您能获得并享受舒适(pythonic用户渴望留在这里)和HPC级性能(无论是哪种类型的后端)的正确组合你希望有。

+1对于精心制定的需求的非常具体的混合。所有的手指交叉。你的问题是一场战斗,发生在计算复杂性的地狱角落。我确实在Python中找到了一个用于稀疏矩阵的LDLT版本,但它不是真正的LDLT,因为它需要正半定。对我来说,就是triv所有特征值均为正(或退化情况下为零)的非理想情况。我的矩阵将在正特征值和负特征值之间进行几乎均匀的分割。我编辑此问题是为了强调我使用的是稀疏矩阵。如果不清楚,很抱歉。我可以使用N=27000000进行LDLT分解,对于较大的矩阵,只能使用矩阵向量乘法估计一些内部特征值。c计算花了一个月的时间在一个集群上。我正在寻找一种不存储L的方法来对稀疏矩阵进行LDLT。另外,还有一个用Python编写的凝聚态物理包,所以我使用Phython意味着我可以更容易地与物理合作者一起工作。@Terrylong正好相反,稀疏矩阵从一开始就被提到了。在这一点上,您的问题表述是明确和合理的,如果发布的答案没有给人留下一个正确的印象,即期望节省一些成本(从任何最可行的稀疏表示中)而导致的通常非常糟糕的权衡结果,那就是我的错