使用scipy.io.mmread读取mtx文件无法正常工作

时间:2014-04-12 18:26:29

标签: python numpy scipy

我有几个大的.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上加载相同的文件。如果没有关闭我的终端会话,这太挂了也无法中断。

知道这里可能会发生什么吗?

1 个答案:

答案 0 :(得分:0)

我已经看到类似的大文件在scipy中需要很长时间才能进行i / o操作。当时,我考虑将它们写成二进制而不是ASCII MTX格式,这将减少所需的I / O量。请参阅Scipy I/O Cookbook,特别是标题为"将Fortran或C数组写入带有元数据"的二进制文件的部分。 libpny需要链接在其中。