3

np.fromfile() 是否有最大文件大小?我正在尝试读取一个 48GB 的​​文件,其中包含大约 2.1e9 条记录(每条记录有 5 个值)。

当我将计数限制为 8e7 时它起作用:

fromfile(filename, dtp, int(8e7))
Out[69]: 
array([(1, 244025.0, 1.1666666269302368, 360.1666564941406, 50.0),
       (2, 244025.0, 1.1666666269302368, 360.5, 50.0),
       (3, 244025.0, 1.1666666269302368, 360.8333435058594, 50.0), ...,
       (255138, 244131.0, 1128.9346923828125, 461.38494873046875, 49.5),
       (255139, 244131.0, 1143.77783203125, 473.2532958984375, 49.5),
       (255140, 244131.0, 1150.4803466796875, 464.6799011230469, 49.5)], 
      dtype=[('ntrac', '<i4'), ('ints', '<f8'), ('x', '<f4'), ('y', '<f4'), ('z', '<f4')]) 

但是当计数设置为 9e7 时,所有值都被读取为零:

In [70]: fromfile(filename, dtp, int(9e7))
Out[70]: 
array([(0, 0.0, 0.0, 0.0, 0.0), (0, 0.0, 0.0, 0.0, 0.0),
       (0, 0.0, 0.0, 0.0, 0.0), ..., (0, 0.0, 0.0, 0.0, 0.0),
       (0, 0.0, 0.0, 0.0, 0.0), (0, 0.0, 0.0, 0.0, 0.0)], 
      dtype=[('ntrac', '<i4'), ('ints', '<f8'), ('x', '<f4'), ('y', '<f4'), ('z', '<f4')])
4

2 回答 2

2

这可能是 Mac OSX 的 fread() 例程中的错误。fwrite() 例程确实有类似的错误:https ://github.com/numpy/numpy/issues/574

您可以通过编写一个简单的 C 测试程序(例如附在票上的那个)来检查这一点,然后向 Apple 投诉...

解决方法是以足够小的块读取文件。

编辑:阅读错误报告太快 --- fwrite() 错误并不完全相同,但我认为不能排除操作系统错误......

于 2012-12-08T15:19:41.550 回答
2

看起来这确实是 Mac OS X 的一个错误。

请参阅 numpy 中的以下错误:https ://github.com/numpy/numpy/issues/2806

我在分支的分支中有一个建议的修复程序,可以帮助某人验证它,请参阅: https ://github.com/sauliusl/numpy/tree/bug_large_save

于 2013-01-06T15:54:17.503 回答