2015-08-15 19 views
2

是否用零初始化numpy.memmap數組?這在哪裏記錄?可以將已存在的 numpy.memmap文件(與先前執行的腳本)的內容加載到新的numpy.memmap而不是用零代替嗎?謝謝!Python:numpy.memmap零,reusage,文檔?

+0

你有沒有試過?發生了什麼? – wwii

+1

zeros行爲[記錄在源代碼中](https://github.com/numpy/numpy/blob/master/numpy/core/memmap.py)在註釋部分。 – wwii

+0

謝謝@wwii!在接受的答案下查看我的完整評論。 – root

回答

0

memmapdoctest例子似乎是這個很清楚:

Create a memmap with dtype and shape that matches our data: 

>>> fp = np.memmap(filename, dtype='float32', mode='w+', shape=(3,4)) 
>>> fp 
memmap([[ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.], 
     [ 0., 0., 0., 0.]], dtype=float32) 

在新創建的文件中的數據是全零

後來寫作之後和在關閉

Load the memmap and verify data was stored: 

>>> newfp = np.memmap(filename, dtype='float32', mode='r', shape=(3,4)) 
>>> newfp 
memmap([[ 0., 1., 2., 3.], 
     [ 4., 5., 6., 7.], 
     [ 8., 9., 10., 11.]], dtype=float32) 

的現有文件中的數據從最後一次使用中繼承。


在源

https://github.com/numpy/numpy/blob/master/numpy/core/memmap.py

def __new__(subtype, filename, dtype=uint8, mode='r+', offset=0, 
      shape=None, order='C'): 
    ... 
    if mode == 'w+' or (mode == 'r+' and flen < bytes): 
     fid.seek(bytes - 1, 0) 
     fid.write(np.compat.asbytes('\0')) 
     fid.flush() 

如果我讀的是正確的它在文件(或現有文件的末尾)開始寫0。 mmap.mmap可以確定對剩餘的期望長度做了什麼。

+1

示例文檔可能會令人困惑和不完整。我將在這裏明確地說明答案:'mode ='w +''用[使用POSIX文件系統語義的系統]中的零初始化(https://github.com/numpy/numpy/blob/master/numpy/core/memmap。 PY);所有其他模式值都使用舊的memmap文件內容進行初始化。謝謝@hpaulj和@wwii – root