NumPy - 載入陣列



在 NumPy 中載入陣列

NumPy 載入陣列指的是將外部檔案或來源中的資料讀取並載入到 NumPy 陣列的過程。

此功能允許您處理儲存在檔案(如文字檔案、二進位制檔案或其他格式)中的資料,並將這些資料引入 NumPy 環境以進行分析或操作。以下是 NumPy 中載入陣列的常用方法:

  • 從文字檔案載入:使用 np.loadtxt() 或 np.genfromtxt() 等函式讀取文字檔案中的資料。
  • 從二進位制檔案載入:使用 np.fromfile() 函式讀取二進位制檔案中的資料。
  • 從 .npy 檔案載入:使用 np.load() 函式讀取 NumPy 本機二進位制格式(.npy 檔案)中儲存的檔案中的資料。

從文字檔案載入陣列

在 NumPy 中從文字檔案載入陣列是將儲存在純文字檔案中的資料匯入到 NumPy 陣列的常見操作。

NumPy 提供了np.loadtxt()函式和np.genfromtxt()函式來處理不同的文字檔案格式和結構,從而輕鬆處理各種型別的基於文字的資料,它們是:

使用 np.loadtxt() 函式

np.loadtxt() 函式用於將文字檔案中的資料讀取到 NumPy 陣列中。

此函式通常用於載入以表格格式組織的結構化資料,例如 CSV 檔案或空格分隔的檔案。它適用於每個行包含一行數字且所有行具有相同列數的資料檔案。以下是語法:

numpy.loadtxt(fname, dtype=<type>, delimiter=<delimiter>, comments=<char>, skiprows=<num>, usecols=<cols>)

其中,

  • fname:要讀取的檔名或檔案物件。
  • dtype:結果陣列的資料型別(預設為浮點數)。
  • delimiter:分隔值的字串或字元(例如,逗號、空格)。
  • comments:指示註釋開始的字串(例如,#)。
  • skiprows:要跳過的檔案開頭的行數。
  • usecols:要讀取的列的索引(例如,[0, 2] 讀取第一列和第三列)。

示例

假設您有一個文字檔案“data.txt”,其內容如下:

1 2 3
4 5 6
7 8 9

您可以使用 loadtxt() 函式將此資料載入到 NumPy 陣列中,如下所示:

import numpy as np

# Load data from a text file
array_from_text = np.loadtxt('data.txt')

print("Array loaded from text file:")
print(array_from_text)

使用 np.genfromtxt() 函式

np.genfromtxt() 函式用於將文字檔案中的資料讀取到 NumPy 陣列中。它對於處理更復雜的文字檔案格式很有用,包括包含缺失值、混合資料型別和不規則結構的檔案。以下是語法:

numpy.genfromtxt(fname, dtype=<type>, delimiter=<delimiter>, comments=<char>, skip_header=<num>, usecols=<cols>, filling_values=<value>, missing_values=<value>, converters=<dict>, encoding=<str>, names=<bool>)

其中,

  • fname:要讀取的檔名或檔案物件。
  • dtype:結果陣列的資料型別。如果未指定,則預設為浮點數。
  • delimiter:分隔值的字串或字元(例如,CSV 使用逗號,空格分隔使用空格)。
  • comments:指示註釋開始的字串(例如,#)。以該字元開頭的行將被忽略。
  • skip_header:要跳過的檔案開頭的行數(用於跳過標題)。
  • usecols:要讀取的列的索引。例如,[0, 2] 將只讀取第一列和第三列。
  • filling_values:用於缺失資料的數值。可以是標量或將列索引對映到填充值的字典。
  • missing_values:檔案中表示缺失資料的數值。可以是標量或數值列表。
  • converters:將列轉換為特定格式的函式的字典。
  • encoding:用於讀取檔案的編碼(預設為 None,使用系統預設編碼)。
  • names:如果為 True,則假定檔案的首行為列名。

示例

在此示例中,我們使用 genfromtxt() 函式將“data.txt”檔案載入到 NumPy 陣列中:

import numpy as np

# Load data from a text file
array = np.genfromtxt('data.txt')

print("Array loaded from text file:")
print(array)

從二進位制檔案載入陣列

在 NumPy 中從二進位制檔案載入陣列涉及讀取以二進位制格式儲存的資料,與文字格式相比,二進位制格式通常更有效地進行儲存和檢索。

二進位制檔案包含原始資料,必須根據預期的格式和資料型別正確解釋這些資料。NumPy 提供了np.fromfile()函式和np.load()函式來從二進位制檔案載入陣列。

使用 np.fromfile() 函式

np.fromfile() 函式用於將二進位制檔案中的資料載入到 NumPy 陣列中。此函式需要了解二進位制檔案的資料型別和格式。以下是語法:

numpy.fromfile(file, dtype=<type>, count=-1, offset=0)

其中,

  • file:要讀取的檔名或檔案物件。
  • dtype:結果陣列的資料型別(例如,np.float32、np.int32)。
  • count:要讀取的專案數。如果為 -1,則讀取所有資料。
  • offset:要跳過的檔案開頭的位元組數。

示例

假設您有一個二進位制檔案“data.bin”,其中包含“32 位”浮點資料。可以使用以下程式碼建立該檔案:

import numpy as np

# Create a binary file with float data
data = np.array([1.1, 2.2, 3.3], dtype=np.float32)
data.tofile('data.bin')
print ('File created!!')

現在,要讀取此二進位制檔案,請使用以下程式碼:

import numpy as np

# Load data from a binary file
array = np.fromfile('data.bin', dtype=np.float32)

print("Array loaded from binary file:")
print(array)

以下是上述程式碼的輸出:

Array loaded from binary file:
[1.1 2.2 3.3]

對 .npy 檔案使用 np.load() 函式

NumPy 中的 np.load() 函式用於從 NumPy 本機二進位制格式.npy.npz檔案中的檔案載入陣列或資料。此格式保留陣列的元資料,例如其形狀和資料型別。“.npz”格式用於以壓縮格式儲存多個數組。

以下是語法:

numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')

其中,

  • file:要讀取的檔名或檔案物件。這可以是 .npy 檔案(用於單個數組)或 .npz 檔案(用於多個數組)。
  • mmap_mode:如果非 None,則用於將檔案記憶體對映,這允許讀取大型陣列而無需將整個檔案載入到記憶體中。有效值為“r”、“r+”、“w+”等。
  • allow_pickle:如果為 True,則允許載入使用 Python 的 pickle 格式儲存的物件。使用此選項時要謹慎,因為它可以執行任意程式碼並構成安全風險。
  • fix_imports:如果為 True,則在載入醃製資料時嘗試檢測並修復 Python 2 到 Python 3 的相容性問題。
  • encoding:載入 Python 3 檔案時用於解碼 Python 2 字串資料的編碼。預設為“ASCII”。

示例:載入 .npy 檔案

這裡,我們首先將陣列儲存到“.npy”檔案格式:

import numpy as np

# Create a NumPy array
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)

# Save the array to a .npy file
np.save('data.npy', array)
print ("Saved!!")

現在,我們使用 NumPy 中的 load() 函式從“.npy”檔案載入儲存的陣列:

import numpy as np

# Load the array from the .npy file
array = np.load('data.npy')

print("Array loaded from .npy file:")
print(array)

獲得的輸出如下所示:

Array loaded from .npy file:
[[1 2 3]
 [4 5 6]]

示例:載入 .npz 檔案

“.npz”格式用於將多個數組儲存到單個壓縮檔案中。它建立一個 zip 歸檔檔案,其中每個檔案都是“.npy”檔案,如以下示例所示:

import numpy as np

# Save multiple arrays to a .npz file
array1 = np.array([1, 2, 3])
array2 = np.array([[4, 5, 6], [7, 8, 9]])
np.savez('data.npz', array1=array1, array2=array2)

# Load the arrays from the .npz file
data = np.load('data.npz')

# Access individual arrays using their keys
array1_loaded = data['array1']
array2_loaded = data['array2']

print("Array 1 loaded from .npz file:")
print(array1_loaded)

print("Array 2 loaded from .npz file:")
print(array2_loaded)

執行上述程式碼後,我們將獲得以下輸出:

Array 1 loaded from .npz file:
[1 2 3]
Array 2 loaded from .npz file:
[[4 5 6]
 [7 8 9]]
廣告