1. 程式人生 > >np.memmap讀取大文件

np.memmap讀取大文件

classes 但是 偏移 href mod sci 自動 .html final

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

參數類型:

  • 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)

輸出為:

[[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

np.memmap讀取大文件