np.memmap讀取大文件

Numpy中的ndarray是一種新形式的Python內建類型。所以,它能夠在須要時被繼承。ndarray造成了許多有用類的基礎。
np.memmap就是其中一種,它是內存映射文件。本質上就是使用C語言中的fseek隨機訪問文件的任何一個位置執行讀寫操做。當一個特別大的數組沒法常駐內存時,np.memmap很是有用。html

參數類型:python

  • filename:字符串、文件或者path
  • dtype:默認爲uint8,表示每一個字節
  • mode:支持r+,r,w+,c四種文件打開方式,r表示只讀方式打開文件愛你,r+表示可讀可寫,w+表示先覆蓋一個已存在的文件而後可讀可寫,c表示能夠對文件進行修改可是不會保存到磁盤。默認爲r+。
  • offset:表示數組數據在文件中的偏移,此值應該是dtype類型的大小的整數倍。
  • shape:能夠指定數組的維度,默認是一維數組。

memmap默認的文件打開方式是r+。數組

import numpy as np

a = np.random.randint(0, 10, (3, 4), dtype=np.int32)
print(a)
a.tofile("haha.bin")
b = np.memmap("haha.bin", dtype=np.int32, shape=(3, 4))
print(b)
b[0, 0] = 100
del b  # 關閉文件,自動調用數組的finalize函數
b = np.memmap("haha.bin", dtype=np.int32, shape=(3, 4))
print(b)

輸出爲:dom

[[7 7 7 3]
 [9 3 7 9]
 [0 7 8 8]]
[[7 7 7 3]
 [9 3 7 9]
 [0 7 8 8]]
[[100   7   7   3]
 [  9   3   7   9]
 [  0   7   8   8]]

參考資料

https://docs.scipy.org/doc/numpy/reference/arrays.classes.html函數

相關文章
相關標籤/搜索