numpy.load#
- numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII', *, max_header_size=10000)[原始碼]#
從
.npy
、.npz
或 pickle 檔案載入陣列或 pickled 物件。警告
載入包含物件陣列的檔案會使用
pickle
模組,這對於錯誤或惡意建構的資料並不安全。考慮傳遞allow_pickle=False
以載入已知不包含物件陣列的資料,以便更安全地處理不受信任的來源。- 參數:
- file檔案類物件、字串或 pathlib.Path
要讀取的檔案。檔案類物件必須支援
seek()
和read()
方法,且必須始終以二進位模式開啟。Pickled 檔案要求檔案類物件也支援readline()
方法。- mmap_mode{None, ‘r+’, ‘r’, ‘w+’, ‘c’}, 選用
若非 None,則記憶體對應檔案,使用給定的模式(請參閱
numpy.memmap
以取得模式的詳細說明)。記憶體對應陣列會保留在磁碟上。但是,它可以像任何 ndarray 一樣存取和切片。記憶體對應對於存取大型檔案的小片段而無需將整個檔案讀取到記憶體中特別有用。- allow_picklebool, 選用
允許載入儲存在 npy 檔案中的 pickled 物件陣列。不允許 pickle 的原因包括安全性,因為載入 pickled 資料可能會執行任意程式碼。如果禁止 pickle,則載入物件陣列將會失敗。預設值:False
- fix_importsbool, 選用
僅在 Python 3 上載入 Python 2 產生的 pickled 檔案時有用,其中包括包含物件陣列的 npy/npz 檔案。如果 fix_imports 為 True,pickle 將嘗試將舊的 Python 2 名稱對應到 Python 3 中使用的新名稱。
- encodingstr, 選用
讀取 Python 2 字串時要使用的編碼。僅在 Python 3 中載入 Python 2 產生的 pickled 檔案時有用,其中包括包含物件陣列的 npy/npz 檔案。不允許使用 ‘latin1’、‘ASCII’ 和 ‘bytes’ 以外的值,因為它們可能會損壞數值資料。預設值:‘ASCII’
- max_header_sizeint, 選用
標頭允許的最大大小。大型標頭可能無法安全地載入,因此需要明確傳遞更大的值。請參閱
ast.literal_eval
以取得詳細資訊。當傳遞 allow_pickle 時,此選項會被忽略。在這種情況下,檔案根據定義是受信任的,且此限制是不必要的。
- 傳回值:
- result陣列、元組、字典等。
儲存在檔案中的資料。對於
.npz
檔案,傳回的 NpzFile 類別實例必須關閉,以避免洩漏檔案描述器。
- 引發:
- OSError
如果輸入檔案不存在或無法讀取。
- UnpicklingError
如果
allow_pickle=True
,但檔案無法載入為 pickle。- ValueError
檔案包含物件陣列,但給定
allow_pickle=False
。- EOFError
當對同一個檔案控制代碼多次呼叫
np.load
時,如果所有資料都已讀取完畢
另請參閱
save
,savez
,savez_compressed
,loadtxt
memmap
建立記憶體對應到儲存在磁碟檔案中的陣列。
lib.format.open_memmap
建立或載入記憶體對應的
.npy
檔案。
註解
如果檔案包含 pickle 資料,則會傳回儲存在 pickle 中的任何物件。
如果檔案是
.npy
檔案,則會傳回單一陣列。如果檔案是
.npz
檔案,則會傳回類似字典的物件,其中包含{filename: array}
鍵值對,每個檔案在封存檔中對應一組鍵值對。如果檔案是
.npz
檔案,則傳回值支援上下文管理器協定,其方式與 open 函數類似with load('foo.npz') as data: a = data['a']
當退出 ‘with’ 區塊時,底層的檔案描述器會被關閉。
範例
>>> import numpy as np
將資料儲存到磁碟,然後再次載入
>>> np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]])) >>> np.load('/tmp/123.npy') array([[1, 2, 3], [4, 5, 6]])
將壓縮資料儲存到磁碟,然後再次載入
>>> a=np.array([[1, 2, 3], [4, 5, 6]]) >>> b=np.array([1, 2]) >>> np.savez('/tmp/123.npz', a=a, b=b) >>> data = np.load('/tmp/123.npz') >>> data['a'] array([[1, 2, 3], [4, 5, 6]]) >>> data['b'] array([1, 2]) >>> data.close()
記憶體對應儲存的陣列,然後直接從磁碟存取第二列
>>> X = np.load('/tmp/123.npy', mmap_mode='r') >>> X[1, :] memmap([4, 5, 6])