0

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 が発生する不適切な引数になると思います。

4

2 に答える 2