文章首發於若綢
摘要#
在機器學習中,數據是至關重要的。因此,對於任何機器學習項目,對數據的管理和處理都是必不可少的。數據管理涉及到許多方面,包括數據的收集、清理、存儲和處理。在這篇文章中,我們將討論如何使用 NumPy 來保存數據集以供集中管理。
使用 NumPy 保存數據集#
NumPy 是一種用於科學計算的 Python 庫。它提供了一個強大的多維數組對象,以及一系列用於處理這些數組的函數。NumPy 數組可以存儲不同類型的數據,包括數字、字符串和布爾值。因此,它們是存儲數據集的理想選擇。
保存單個數組#
如果你的數據集中只有一個數組,我們可以使用 NumPy 的save
函數。
numpy.save#
函數變量:
file: file, str, or pathlib.Path
數據被保存到的文件或文件名。如果文件是一個文件對象,那麼文件名將不會改變。如果文件是一個字符串或路徑,如果文件名還沒有擴展名,那麼將在文件名上添加一個
.npy
擴展名。arr: array_like
要保存的陣列數據。
allow_pickle: bool, optional
允許使用 Python pickles 來保存對象數組。不允許 pickle 的原因包括安全性 (加載 pickle 的數據可以執行任意代碼) 和可移植性 (pickle 的對象可能無法在不同的 Python 安裝上加載,例如,如果存儲的對象需要的庫不可用,而且不是所有 pickle 的數據都能在 Python 2 和 Python 3 之間兼容)。默認值: True
fix_imports: bool, optional
只有在強迫 Python 3 上對象數組中的對象以 Python 2 兼容的方式被 pickle 時才有用。如果 fix_imports 為 True,pickle 將嘗試把新的 Python 3 名稱映射到 Python 2 中使用的舊模塊名稱,這樣 pickle 的數據流就可以用 Python 2 讀取。
例如,假設我們有一個名為data
的 NumPy 數組,我們可以使用以下代碼將其保存到名為data.npy
的文件中:
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('data.npy', data)
從文件中加載數組#
要加載數據集,我們可以使用 NumPy 的load
函數。例如,以下代碼加載了名為data.npy
的文件中保存的數組:
import numpy as np
data = np.load('data.npy')
print(data)
輸出將是:
[[1 2 3]
[4 5 6]
[7 8 9]]
同時保存多個數組#
如果你的數據集中具有多個數組,像 trani_set, train_label, test_set, test_label。可以使用 NumPy 的savez
或者savez_compressed
函數對數據集進行保存。**numpy.savez
將多個數組保存為未壓縮的.npz
文件,而numpy.savez_compressed
將數組保存為壓縮的.npz
** 文件,可以節省存儲空間。
numpy.savez#
函數變量:
file: str or file
文件名(str)或一個打開的文件(file-like object),數據將被保存在那裡。如果文件是一個字符串或一個路徑,如果文件名中沒有
.npz
擴展名,將被附加到文件名中.args: Arguments, optional
要保存到文件中的數組。請使用關鍵字參數(見下面的 kwds)來給數組指定名稱。作為 args 指定的數組將被命名為 "arr_0"、"arr_1",以此類推。
kwds: Keyword arguments, optional
要保存到文件的數組。每個數組將以其相應的關鍵字名稱保存到輸出文件中。
用kwds,數組將以關鍵字的名稱保存。在這個例子中,我們創建了兩個 NumPy 數組array1
和array2
,然後使用numpy.savez
將它們保存到名arrays.npz
** 的文件中。需要注意的是,我們需要為每個數組指定一個關鍵字參數,該參數將作為數組在文件中的名稱。
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 保存數組到文件
np.savez('arrays.npz', arr1=array1, arr2=array2)
numpy.savez_compressed#
函數變量:
file: str or file
文件名(str)或一個打開的文件(file-like object),數據將被保存在那裡。如果文件是一個字符串或一個路徑,如果文件名中沒有
.npz
擴展名,將被附加到文件名中。args: Arguments, optional
要保存到文件中的數組。請使用關鍵字參數(見下面的 kwds)來給數組指定名稱。作為 args 指定的數組將被命名為 "arr_0"、"arr_1",以此類推。
kwds: Keyword arguments, optional
要保存到文件的數組。每個數組將以其相應的關鍵字名稱保存到輸出文件中。
這個例子與上一個類似,但使用了 **numpy.savez_compressed
將數組保存為壓縮的.npz
** 文件。
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 保存數組到壓縮文件
np.savez_compressed('compressed_arrays.npz', arr1=array1, arr2=array2)
從文件中加載數組#
要從 **.npz
文件中加載數組,可以使用numpy.load
** 函數:
import numpy as np
# 加載保存的數組
loaded_arrays = np.load('arrays.npz')
# 通過在文件中指定的名稱訪問數組
loaded_array1 = loaded_arrays['arr1']
loaded_array2 = loaded_arrays['arr2']
在這個例子中,我們使用 **numpy.load
加載了名為arrays.npz
的文件,並通過之前指定的名稱訪問其中的數組。同樣的方法也適用於加載壓縮的.npz
** 文件。
小結#
在本文中,我們討論了如何使用 NumPy 來保存數據集以供集中管理。這是一個重要的數據管理方面,應該在任何機器學習項目中得到充分的重視。