一、Numpy數組的存儲方式
Numpy是Python中重要的科學計算庫,它提供了高性能的多維數組對象和豐富的函數庫。在處理大量數據時,如果直接使用Python自帶的列表進行操作,速度可能會十分緩慢。而使用Numpy數組則可以提高處理速度。在進行科學計算、數據分析等領域的研究過程中,常常需要將Numpy數組存儲到文件中,以便隨後使用。Numpy支持多種文件格式對數組進行存儲,包括二進制格式、文本格式、NPZ格式等。
二、二進制格式存儲Numpy數組
import numpy as np
arr = np.array([1, 2, 3])
arr.tofile('data.bin') #將數組存儲到二進制文件中
new_arr = np.fromfile('data.bin', dtype=np.int16) #從二進制文件中讀入數據
二進制格式最基本的存儲方式是使用Numpy提供的”tofile”函數,將數組直接存儲到硬盤中。”tofile”函數需要一個文件名作為參數來指定存儲的位置。可以通過祖先類型來指定存儲的數據類型,若沒有指定數據類型,則默認為float類型。在讀取二進制文件時,可以使用Numpy提供的”fromfile”函數,從文件中讀取數據,該函數讀入的數據需要手動reshape為原數組的形狀。
三、文本格式存儲Numpy數組
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
np.savetxt('data.txt', arr) #將數組存儲到文本文件中
new_arr = np.loadtxt('data.txt') #從文本文件中讀入數據
除了二進制文件外,我們也可以使用文本文件存儲Numpy數組。Numpy提供了”save”和”savez”函數來存儲Numpy數組為文本文件,其中”save”函數將數組保存為.npy文件,”savez”函數將數組保存為.npz文件。此外,Numpy還提供了”load”和”loadtxt”函數來從文件中讀取數據。”savetxt”函數可以將Numpy數組保存為txt文件或csv文件,具體可以指定分割符和小數點位數等參數。而”loadtxt”函數用於從txt文件中讀取數據,不支持讀取csv文件。
四、NPZ格式存儲多個Numpy數組
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
np.savez('data.npz', arr1=arr1, arr2=arr2) #將多個數組存儲到npz文件中
data = np.load('data.npz') #從npz文件中讀入數據
new_arr1 = data['arr1'] #獲取存儲的第一個數組
new_arr2 = data['arr2'] #獲取存儲的第二個數組
NPZ格式是一種壓縮存儲多個Numpy數組的格式,與.npy格式不同,NPZ格式可以存儲多個數組,並且在進行讀取時,不需要手動將多個數組的文件名都傳遞給函數。我們可以使用”savez”函數將多個數組保存為一個npz文件,也可以使用”savez_compressed”函數將多個數組壓縮並存儲。
五、高效存儲大型Numpy數組
對於大型Numpy數組的存儲,我們需要考慮存儲效率和存儲速度。如果遇到非常大的多為數組,我們可以考慮使用”memmap”函數來直接在磁盤中對數組進行讀寫操作。
import numpy as np
big_arr = np.memmap('big_data.bin', dtype=np.float32, mode='w+', shape=(1000000, 1000)) #創建一個大型Numpy數組
big_arr[:] = np.random.rand(1000000, 1000) #將數組賦值為隨機數
“memmap”函數返回一個numpy.memmap對象,該對象在內存中只存儲數組的元數據,真正的數據存儲在磁盤中,使用者無需擔心內存限制問題。”memmap”函數需要提供文件名、數組的數據類型、讀寫模式和數組的維度大小等參數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/293918.html