3 回答

TA貢獻1942條經驗 獲得超3個贊
使用numpy.memmap您創建直接映射到文件的數組:
import numpy
a = numpy.memmap('test.mymemmap', dtype='float32', mode='w+', shape=(200000,1000))
# here you will see a 762MB file created in your working directory
您可以將其視為常規數組:+ = 1000。
甚至可以將更多數組分配給同一文件,并根據需要從相互來源控制它。但是我在這里遇到了一些棘手的事情。要打開完整的數組,您必須先使用del以下命令“關閉”上一個數組:
del a
b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(200000,1000))
但是只打開數組的某些部分可以實現同時控制:
b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(2,1000))
b[1,5] = 123456.
print a[1,5]
#123456.0
大!a與一起更改b。更改已經寫入磁盤。
另一個值得一提的重要事情是offset。假設您不想采用中的前2行b,而是要采用150000和150001行。
b = numpy.memmap('test.mymemmap', dtype='float32', mode='r+', shape=(2,1000),
offset=150000*1000*32/8)
b[1,2] = 999999.
print a[150001,2]
#999999.0
現在,您可以在同時操作中訪問和更新陣列的任何部分。注意偏移量計算中的字節大小。因此,對于“ float64”,此示例為150000 * 1000 * 64/8。

TA貢獻1815條經驗 獲得超6個贊
32位進程僅限于2Gb RAM(虛擬或其他)。這是因為32位僅允許尋址4Gb,而OS保留2Gb??梢詫⑵湔{整為3Gb / 1Gb,但這是您的限制。解決此問題的唯一其他方法是使用多進程模塊將程序拆分為單獨的進程,每個進程限制為2Gb
添加回答
舉報