我目前正在研究许多小型 6x6 矩阵:形状 A = (N, N, N, 6, 6)与N约为500。我将这些矩阵存储在 Pytables ( http://www.pytables.org ) 的 HDF5 文件中。
我想对这些矩阵进行一些计算,比如求逆、转置、乘法等……这很容易,而N不是很大,例如numpy.linalg.inv(A)应该不用循环就可以解决问题。但在我的情况下,它工作得非常慢,有时我有记忆问题。
你能建议我一种更有效地做到这一点的方法吗?
一个 6x6 矩阵有 36 个 8 字节双精度值,即 288 个字节;为了便于计算和开销,我们会说 0.5KB。如果您接受这一点,那么其中的 500 个将仅代表 250KB - 没有多少内存。
如果您将所有这些倒数保留在内存中,它仍然不是很多——只有 500KB。
你能计算出你的程序消耗的 RAM 量来确认这一点吗?
你在做什么——有限元分析?这些是 500 个单元的刚度、质量和阻尼矩阵吗?
如果是,则不应反转元素矩阵。您必须将它们组装成全局矩阵,这将消耗更多内存,然后解决这个问题。仍然没有计算逆 - LU分解是通常的方法。
我不会认为 500 个元素的网格是一个大问题。当我在 1995 年停止做这种工作时,我看到了包含成千上万个元素的网格。我确信硬件在今天使更大的问题成为可能。
您做错了其他事情,或者您未提供某些详细信息。