如果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')])
答案 0 :(得分:2)
这可能是Mac OSX的fread()例程中的一个错误。 fwrite()例程确实有类似的错误:https://github.com/numpy/numpy/issues/574
您可以通过编写一个简单的C测试程序(例如那里附带的票证)进行检查,然后向Apple投诉......
解决方法是以足够小的块读取文件。
编辑:过快读取错误报告--- fwrite()错误并不完全相似,但我认为不能排除操作系统错误......
答案 1 :(得分:2)
看起来它确实是Mac OS X的一个错误。
请参阅numpy中的以下错误:https://github.com/numpy/numpy/issues/2806
我在分支的分支中有一个建议的修复,有助于某人验证它,请参阅: https://github.com/sauliusl/numpy/tree/bug_large_save