从文件加载大型计算序列并在Python

时间:2017-10-21 10:38:15

标签: python matrix sequence

我的问题涉及大矩阵(20GB +存储),其中每个矩阵元素由代数表达式组成。为了绕过这个大小问题,我编写了一个脚本,将矩阵转换为计算序列,并通过这样做将文件大小减半。以下是如何完成此操作的示例:

考虑算术表达式(1x1矩阵):

enter image description here

通过测序代码运行它会产生:

enter image description here

tx参数的定义是:

t1 = A^2, t2 = t1*A, t3 = t1^2, t4 = t3*t2, t7 = t3*t1, t8 = B^2, t14 = C^2, t16 = t3*A, t17 = t8*B, t23 = t8^2, t33 = A+B, t34 = t33^2, t35 = t34^2

对于这个孤立的例子,它似乎毫无意义,但是当应用于10,000 x 10,000矩阵时,元素之间的常见序列数量会大大减少存储大小(如压缩程序)。

我的问题是如何最好地处理这些使用Python保存在文件中的定义,以重建矩阵并评估元素。

对于上面的小(1x1)示例,可以轻松完成:

from __future__ import division 

# Values for A,B,C
A = 1
B = 2
C = 3

# List of definitions
t1 = A**2
t2 = t1*A
t3 = t1**2
t4 = t3*t2
t7 = t3*t1
t8 = B**2
t14 = C**2
t16 = t3*A
t17 = t8*B
t23 = t8**2
t33 = A+B
t34 = t33**2
t35 = t34**2

# Print numerical result
print((1/2)*(6*B*C*t7+16*C*t16*t8+t1*t23*t8+B*t4+C*t4+t14*t7+31*t16*t17+6*t7*t8+16)/(t17*t14*C*t2*t35*t33))

这给出了0.00565843621399的正确答案。对于具有较大定义列表的矩阵,我已导入了运行良好的文件,但是当文件大小变大(1GB +)时,导入会在创建.pyc文件时遇到内存问题。

我可以逐行读取文件但这会使矩阵的评估更复杂,因为tx定义现在都是字符串。

我觉得有多种方法可以解决这个问题,但我不确定矩阵何时变得非常大的最有效的实现,所以我在这里向更有经验的人询问有关如何最好地解决问题的一些见解。

0 个答案:

没有答案