1. 程式人生 > >numpy檔案存取-npz,npy

numpy檔案存取-npz,npy

轉處:http://blog.csdn.net/pipisorry/article/details/39088003

NumPy提供了多種檔案操作函式方便我們存取陣列內容。

檔案存取的格式:二進位制和文字。二進位制格式的檔案又分為NumPy專用的格式化二進位制型別和無格式型別。

Numpy binary files (NPY, NPZ)

load(file[, mmap_mode, allow_pickle, ...]) Load arrays or pickled objects from .npy.npz or pickled files.
save(file, arr[, allow_pickle, fix_imports]) Save an array to a binary file in NumPy .npy format.
savez(file, *args, **kwds) Save several arrays into a single file in uncompressed .npz format.
Save several arrays into a single file in compressed .npz format.

numpy.load和numpy.save函式(推薦在不需要檢視儲存資料的情況下使用)

以NumPy專用的二進位制型別儲存資料,這兩個函式會自動處理元素型別和shape等資訊,使用它們讀寫陣列就方便多了,但是numpy.save輸出的檔案很難和其它語言編寫的程式讀入:

>>> np.save("a.npy", a)
>>> c = np.load( "a.npy" )
>>> c
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

Note:

1. 檔案要儲存為.npy檔案型別,否則會出錯

2. 儲存為numpy專用二進位制格式後,就不能用notepad++開啟(亂碼)看了,這是相對tofile內建函式不好的一點

numpy.savez函式

如果你想將多個數組儲存到一個檔案中的話,可以使用numpy.savez函式。savez函式的第一個引數是檔名,其後的引數都是需要儲存的陣列,也可以使用關鍵字引數為陣列起一個名字,非關鍵字引數傳遞的陣列會自動起名為arr_0, arr_1, ...。savez函式輸出的是一個壓縮檔案(副檔名為npz),其中每個檔案都是一個save函式儲存的npy檔案,檔名對應於陣列名。load函式自動識別npz檔案,並且返回一個類似於字典的物件,可以通過陣列名作為關鍵字獲取陣列的內容:

>>> a = np.array([[1,2,3],[4,5,6]])
>>> b = np.arange(0, 1.0, 0.1)
>>> c = np.sin(b)
>>> np.savez("result.npz", a, b, sin_array = c)
>>> r = np.load("result.npz")
>>> r["arr_0"] # 陣列a
array([[1, 2, 3],
       [4, 5, 6]])
>>> r["arr_1"] # 陣列b
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])
>>> r["sin_array"] # 陣列c
array([ 0.        ,  0.09983342,  0.19866933,  0.29552021,  0.38941834,
        0.47942554,  0.56464247,  0.64421769,  0.71735609,  0.78332691])

如果你用解壓軟體開啟result.npz檔案的話,會發現其中有三個檔案:arr_0.npy, arr_1.npy, sin_array.npy,其中分別儲存著陣列a, b, c的內容