一、npy格式簡介
NumPy是Python中用於科學計算的基礎包,提供了數組和矩陣計算的支持,是很多數據處理、機器學習相關庫的基礎依賴。而npy格式則是NumPy中其自帶的數據格式,在存儲和載入NumPy數組時使用,具有高效性和通用性。
npy格式本質上是一種二進位文件格式,以.npy作為擴展名,由4部分組成:
1. Magic String: \x93NUMPY\x01\x00
2. Major Version Number: uint8
3. Minor Version Number: uint8
4. Header Length: uint16_bigendian(大端模式)
具體而言,在讀取.npy文件時,先讀取4位元組的魔術字元串,判斷其是否為NUMPY,即可確定文件格式是否正確。接下來讀取版本號和頭部長度,進而可以得到數據的類型、形狀等信息。頭部長度的值為一個16位大端整數( uint16 ),後續緊跟著的則是一個UTF-8編碼的JSON字元串,即 ndarray.dump 函數存儲時保存的數組屬性信息。
二、npy格式的優勢
相較於其他常見的數據格式,npy格式具有下列優點:
1. 快速、高效:npy文件的二進位格式非常緊湊,數據可以直接在內存中複製,即使處理大型數據也能夠快速載入。
2. 通用性:npy格式被NumPy Python庫原生支持,可以被幾乎所有編程語言使用。
3. 可壓縮性:npy格式可以被壓縮為ZIP格式,這大大減少了文件大小,有時甚至可以達到原始文件大小的10%以下。
三、npy格式的使用實例
1. 創建numpy數組
要創建一個numpy數組,我們可以使用numpy的array()函數,並在其中傳遞要創建的數組。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
np.save('array.npy', a)
這裡,我們創建了一個名為「array.npy」的文件,在其中存儲了名為「a」的數組。注意,一定要使用「.npy」擴展名,否則會出現文件格式錯誤。
2. 讀取numpy數組
要讀取一個以.npy格式存儲的numpy數組,我們可以使用numpy的load()函數。 以下是讀取和列印數組的示例:
import numpy as np
a = np.load('array.npy')
print(a)
當然,我們也可以查看這個數組的大小、形狀、元素類型等屬性:
print(a.dtype)
print(a.shape)
print(a.size)
3. 壓縮和解壓縮numpy數組
我們可以將.npy文件壓縮為ZIP格式,來減少文件大小,也可以將壓縮後的文件解壓縮為.npy格式,來讀取其中存儲的numpy數組數據。
以下是通過Python內置的zipfile庫將.npy文件壓縮為ZIP文件的示例:
import zipfile
zipobj=zipfile.ZipFile("array.zip","w")
zipobj.write("array.npy")
zipobj.close()
以下是將ZIP文件解壓縮為.npy格式的示例:
zipobj=zipfile.ZipFile("array.zip","r")
zipobj.extract("array.npy",path="./")
zipobj.close()
arr = np.load("array.npy")
print(arr)
4. 將Python對象保存到numpy數組
我們可以使用numpy的save()函數將Python對象(如列表、字典等)直接存儲為.npy格式的文件。
以下是將列表存儲為.npy文件的示例:
list_obj = [1, 2, 3, 4, 5]
np.save('list.npy', list_obj)
# 讀取
loaded_obj = np.load('list.npy')
print(loaded_obj)
5. 創建結構化數組並存儲
我們可以通過定義一個包含每個數據類型的元組列表來創建結構化數組。然後,我們可以使用同樣的save()函數將其保存為.npy文件。
以下是創建單個結構化數組並保存為.npy文件的示例:
dt = np.dtype([('name', 'S10'), ('grades', int)])
grades = np.array([('Matt', 90), ('Steve', 85), ('Joy', 87)], dtype=dt)
np.save('grades.npy', grades)
# 讀取
data = np.load('grades.npy', allow_pickle=True)
print(data)
6. 多個numpy數組的存儲
我們可以使用同樣的save()函數一次性存儲和讀取多個numpy數組。只需將要保存的數組作為參數傳遞給save()函數即可。
以下是同時保存多個numpy數組的示例:
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
c = np.array([9, 10, 11, 12])
np.savez('multiple_arrays.npz', a=a, b=b, c=c)
# 讀取
data = np.load('multiple_arrays.npz')
print(data['a'])
print(data['b'])
print(data['c'])
總結
npy文件格式是NumPy庫中常用的文件格式之一。通過使用npy格式,我們可以方便地存儲和讀取numpy數組,以及其他Python對象。此外,由於npy格式的高效性和通用性,它也被許多數據處理和機器學習相關庫廣泛使用。
原創文章,作者:LQJUI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370505.html