一、基礎知識
numpy是一個廣泛使用的Python庫,用於提供高性能計算和數據分析。而數據存儲則是數據處理時的關鍵部分之一,它涉及到將數據從一種格式轉換成另一種格式,以便在處理和分析中使用。在numpy中,np.savez()函數就是一個非常有用的功能,可以有效地用於存儲和載入多個numpy數組。該函數將numpy的多個數組保存在單個壓縮文件中,並可以在後續工作中輕鬆地載入和分析這些數組。例如:
import numpy as np
# 創建numpy數組
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.array([7, 8, 9])
# 將數組保存到「savez.npz」文件中
np.savez('savez.npz', a=a, b=b, c=c)
# 從「savez.npz」文件中載入數組
data = np.load('savez.npz')
print(data['a'])
print(data['b'])
print(data['c'])
這裡,我們首先創建了3個numpy數組(a,b和c),然後使用np.savez()函數將它們保存在「savez.npz」文件中,參數a、b和c指定將要保存的數組。稍後,我們使用np.load()函數從文件中載入數組,並將它們存儲在一個名為「data」的變數中。最後,我們對每個數組使用print()函數進行列印,以此來查看它們的值。
二、高級應用
np.savez()是一個非常靈活的函數,其可以處理各種不同類型和形狀的數組。下面,我們將介紹一些np.savez()函數的高級應用和技巧。
1.將多個數組保存在一個文件中
有時,您需要保存多個不同類型和形狀的numpy數組,以便在以後的工作中進行使用。np.savez()函數可以幫助您實現這一點,具體方法是通過在函數中指定多個參數名,在保存數據時將它們一起保存到同一文件中。例如:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([5, 6, 7])
arr3 = np.array(['one', 'two', 'three'])
np.savez('multi_array.npz', a=arr1, b=arr2, c=arr3)
load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])
在這個示例中,我們創建了一個包含3個不同類型和形狀的numpy數組的文件。當我們載入該文件時,在列印每個變數a、b和c時,我們可以看到已成功保存各個數組。
2.壓縮存儲
np.savez()函數默認使用未壓縮的存儲格式,但在某些情況下,您可能需要使用更高效的壓縮格式。使用numpy.savez_compressed()函數即可實現這一點,例如:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([5, 6, 7])
arr3 = np.array(['one', 'two', 'three'])
np.savez_compressed('multi_array.npz', a=arr1, b=arr2, c=arr3)
load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])
通過使用np.savez_compressed()函數,我們可以在將numpy數組保存到文件中時使用壓縮格式。這使得文件大小更小,而且載入速度更快。
3. 附加數據
在某些情況下,您可能需要將一個或多個numpy數組附加到已有的npz文件中。在這種情況下,np.savez()函數會很有用,您可以先載入文件,然後使用update()將新的數組添加到文件中。例如:
import numpy as np
arr1 = np.array([[1, 2], [3, 4]])
np.savez('multi_array.npz', a=arr1)
arr2 = np.array([5, 6, 7])
update_array = np.load('multi_array.npz')
update_array.update({'b':arr2})
np.savez('multi_array.npz', **update_array)
load_array = np.load('multi_array.npz')
print(load_array['a'])
print(load_array['b'])
在這個示例中,我們首先使用np.savez()函數將一個numpy數組保存到「multi_array.npz」中。接著,我們創建另一個數組,並在使用np.load()函數載入原始NPZ文件之後調用.update()方法將其附加到該文件中。最後,我們再一次使用np.savez()函數將新文件保存到磁碟上。在列印每個變數時,我們可以看到已成功保存各個數組,而且新的數組也被添加到了文件中。
4. 子文件夾封裝
在numpy中,您可以將多個數組存儲為單個文件,但如果數組數量很多,有時將它們封裝到子文件夾中會更好。您可以通過使用os.mkdir()和os.path.join()函數實現這一目標,例如:
import numpy as np
import os
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
if not os.path.exists('data'):
os.makedirs('data')
np.savez(os.path.join('data', 'multi_array.npz'), a=arr1, b=arr2, c=arr3)
load_array = np.load(os.path.join('data', 'multi_array.npz'))
print(load_array['a'])
print(load_array['b'])
print(load_array['c'])
在這個示例中,我們使用os模塊向npz文件添加子文件夾。在if語句中,我們使用os.makedirs()方法來檢查”data”文件夾是否存在。然後,我們使用np.savez()函數將numpy數組保存到名為「multi_array.npz」的(隱式)文件中。載入文件後,我們可以發現已成功保存所有數組。
三、結論
在本文中,我們介紹了NumPy的核心庫功能之一即np.savez(),以及一些高級應用和技巧。我們發現,np.savez()是一個非常有用的函數,具有廣泛的使用範圍,並可以輕鬆地用於存儲和載入numpy數組。np.savez()函數使得數據的存儲和處理更加高效,這對數據科學和機器學習的發展有著至關重要的作用。
原創文章,作者:FOQP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142933.html