我正在尝试使用 numpy memmap 创建一个大文件
big_file = np.memmap(fnamemm, dtype=np.float32, mode='w+', shape=(np.prod(dims[1:]), len_im), order='F')
该系统是在 64 位 python 中运行的 Windows 10-64 位
In [2]: sys.maxsize
Out[2]: 9223372036854775807
有足够的虚拟内存(最大120000Megas)
但是,每次我尝试创建一个结果大小应超过 2Gigas 的文件时,都会出现运行时错误
In [29]: big_file = np.memmap(fnamemm, dtype=np.int16, mode='w+', shape=(np.prod(dims[1:]), len_im), order=order)
C:\Users\nuria\AppData\Local\Continuum\anaconda3\envs\caiman\lib\site-packages\numpy\core\memmap.py:247: RuntimeWarning: overflow encountered in long_scalars
bytes = long(offset + size*_dbytes)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-29-66578da2d3f6> in <module>()
----> 1 big_file = np.memmap(fnamemm, dtype=np.int16, mode='w+', shape=(np.prod(dims[1:]), len_im), order=order)
~\AppData\Local\Continuum\anaconda3\envs\caiman\lib\site-packages\numpy\core\memmap.py in __new__(subtype, filename, dtype, mode, offset, shape, order)
248
249 if mode == 'w+' or (mode == 'r+' and flen < bytes):
--> 250 fid.seek(bytes - 1, 0)
251 fid.write(b'\0')
252 fid.flush()
OSError: [Errno 22] Invalid argument
当文件大小低于 2Gigas 时,不会发生此错误...
我已经用另一个同样是 64 位的 Windows 7 复制了同样的问题
我忘记了什么吗?为什么 memmap 充当我的 32 位系统?
编辑:该错误不完全是运行时错误。变量“bytes”在尝试获取文件的长度时收到运行时警告,导致我猜测一个错误的参数会引发 Errno 22