NumPy的內存映射的數據結構(MEMMAP)可能會在這裏一個不錯的選擇。
您可以從磁盤上的二進制文件訪問您的NumPy數組,而無需將整個文件一次加載到內存中。
(注意,我相信,但我不肯定的,那Numpys MEMMAP對象不一樣蟒蛇 - 尤其NumPys是陣列狀,Python的是文件等。)
該方法的簽名是:
A = NP.memmap(filename, dtype, mode, shape, order='C')
所有參數是直截了當的(即,它們具有如NumPy的其它地方使用的相同的含義),除了「訂單」,它指的是ndarray存儲器佈局的順序。我相信缺省值是'C',而Fortran的(唯一)其他選項是'F' - 與其他地方一樣,這兩個選項分別代表行主和列主指令。
這兩種方法是:
沖洗(其寫入到磁盤您對陣列的任何改變);和
靠近(其將數據寫入到MEMMAP陣列,或更精確地存儲在磁盤上的陣列狀的內存映射到數據)
例如使用:
import numpy as NP
from tempfile import mkdtemp
import os.path as PH
my_data = NP.random.randint(10, 100, 10000).reshape(1000, 10)
my_data = NP.array(my_data, dtype="float")
fname = PH.join(mkdtemp(), 'tempfile.dat')
mm_obj = NP.memmap(fname, dtype="float32", mode="w+", shape=1000, 10)
# now write the data to the memmap array:
mm_obj[:] = data[:]
# reload the memmap:
mm_obj = NP.memmap(fname, dtype="float32", mode="r", shape=(1000, 10))
# verify that it's there!:
print(mm_obj[:20,:])
也許一個有用的參考:剛剛發現這被稱爲「核心外」任務。 – erich 2010-08-04 18:53:23