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]]
numpy數組和bytes互轉
import numpy as np
a = np.random.rand(3, 3).astype(np.float32)
print(a)
b = a.tobytes()
res = np.frombuffer(b, dtype=np.float32)
print(res)
參考資料
https://docs.scipy.org/doc/numpy/reference/arrays.classes.html