我有几个大的.mtx(范围从2-12 GB),我试图加载到Python中的稀疏矩阵,但它不起作用。我在同一台机器上自己生成了文件而没有错误,所以我在这里完全感到困惑。
获取文件信息正常:
from scipy.io import mminfo,mmread
mminfo(filename)
>>> (8649029, 181, 110656308, 'coordinate', 'real', 'general')
但是如果我尝试将文件加载到内存中:
mat = mmread(filename)
它只是挂起。等了一个小时后,我试着打断内核(这是在Windows 7机器上的IPython笔记本上),但是这也会挂起,我不得不关闭笔记本来阻止它。我从命令行重复它,结果相似。这次我能用ctrl-c中断,但是遇到了一些系统错误(没有Python异常)我以前从未见过:
forrtl: error (200): program aborting due to control-C event
Image PC Routine Line Source
kernel32.dll 0000000076CC4803 Unknown Unknown Unknown
kernel32.dll 0000000076C8652D Unknown Unknown Unknown
ntdll.dll 0000000076EBC541 Unknown Unknown Unknown
我甚至尝试通过Python解释器在Mac上加载相同的文件。如果没有关闭我的终端会话,这太挂了也无法中断。
知道这里可能会发生什么吗?
答案 0 :(得分:0)
我已经看到类似的大文件在scipy中需要很长时间才能进行i / o操作。当时,我考虑将它们写成二进制而不是ASCII MTX格式,这将减少所需的I / O量。请参阅Scipy I/O Cookbook,特别是标题为"将Fortran或C数组写入带有元数据"的二进制文件的部分。 libpny
需要链接在其中。