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
十分な仮想メモリ (最大 120000 メガ)
ただし、結果のサイズが2ギガを超えるファイルを作成しようとするたびに、ランタイムエラーが発生します
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
ファイルサイズが2ギガ未満の場合、このエラーは発生しません...
別のWindows 7でも64ビットで同じ問題を再現しました
私は何かを忘れましたか?32 ビット システムを使用しているのに memmap が機能するのはなぜですか?
編集: エラーは正確には実行時エラーではありません。ファイルの長さを取得しようとすると、変数「bytes」がランタイム警告を受け取り、その結果、Errno 22 が発生する不適切な引数になると思います。