使用 scipy.io.mmread 读取 mtx 文件不起作用

问题描述 投票:0回答:2

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

知道这里会发生什么吗?

python numpy scipy
2个回答
0
投票

我见过类似的大文件在 scipy 中的 I/O 需要很长时间。当时,我考虑将它们写为二进制而不是 ASCII MTX 格式,这将减少所需的 I/O 量。请参阅 Scipy I/O Cookbook,特别是标题为“使用元数据将 Fortran 或 C 数组写入二进制文件”的部分。

libpny
需要链接。


0
投票

使用 fast-matrix-market 而不是

scipy.io
对我有用。根据包装的网页:

scipy.io.mmread()
在大型矩阵(维度 > 2^31)上崩溃,因为它在大多数平台上使用 32 位索引。

import fast_matrix_market as fmm
mat = fmm.mmread(filename)
© www.soinside.com 2019 - 2024. All rights reserved.