numpy.loadtxt#

numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding=None, max_rows=None, *, quotechar=None, like=None)[原始碼]#

從文字檔載入資料。

參數:
fname檔案、字串、pathlib.Path、字串列表、產生器

要讀取的檔案、檔名、列表或產生器。如果檔名副檔名為 .gz.bz2,則檔案會先解壓縮。請注意,產生器必須傳回位元組或字串。列表中的字串或產生器產生的字串會被視為行。

dtype資料類型,選用

結果陣列的資料類型;預設值:float。如果這是結構化資料類型,則結果陣列將為一維,且每一列將被解譯為陣列的一個元素。在這種情況下,使用的欄數必須與資料類型中的欄位數相符。

comments字串或字串序列或 None,選用

用於指示註解開始的字元或字元列表。None 表示沒有註解。為了向後相容性,位元組字串將被解碼為 'latin1'。預設值為 '#'。

delimiter字串,選用

用於分隔值的字元。為了向後相容性,位元組字串將被解碼為 'latin1'。預設值為空白字元。

在 1.23.0 版本中變更:僅支援單一字元分隔符號。換行字元不能用作分隔符號。

convertersdict 或可呼叫物件,選用

用於自訂值剖析的轉換器函數。如果 converters 是可呼叫物件,則該函數會套用至所有欄,否則它必須是一個將欄號對應到剖析器函數的 dict。有關更多詳細資訊,請參閱範例。預設值:None。

在 1.23.0 版本中變更:新增了將單一可呼叫物件傳遞給所有欄的功能。

skiprows整數,選用

跳過前 skiprows 行,包括註解;預設值:0。

usecols整數或序列,選用

要讀取的欄,其中 0 是第一欄。例如,usecols = (1,4,5) 將擷取第二、第五和第六欄。預設值 None 會讀取所有欄。

unpack布林值,選用

如果為 True,則傳回的陣列會轉置,以便可以使用 x, y, z = loadtxt(...) 解包引數。當與結構化資料類型一起使用時,會為每個欄位傳回陣列。預設值為 False。

ndmin整數,選用

傳回的陣列將至少具有 ndmin 維度。否則,單維軸將被擠壓。合法值:0(預設值)、1 或 2。

encoding字串,選用

用於解碼輸入檔的編碼。不適用於輸入串流。特殊值 'bytes' 啟用向後相容性變通方法,以確保您在可能的情況下收到位元組陣列作為結果,並將 'latin1' 編碼的字串傳遞給轉換器。覆寫此值以接收 Unicode 陣列,並將字串作為輸入傳遞給轉換器。如果設定為 None,則使用系統預設值。預設值為 'bytes'。

在 2.0 版本中變更:在 NumPy 2 之前,為了與 Python 2 相容,預設值為 'bytes'。現在預設值為 None

max_rows整數,選用

skiprows 行之後讀取 max_rows 行內容。預設值是讀取所有列。請注意,不包含資料的空白列(例如空行和註解行)不計入 max_rows,而此類行則計入 skiprows

在 1.23.0 版本中變更:不包含資料的行,包括註解行(例如,以 '#' 開頭或透過 comments 指定的行)不計入 max_rows

quotecharUnicode 字元或 None,選用

用於表示引號項目的開始和結束的字元。引號項目內的定界符號或註解字元會被忽略。預設值為 quotechar=None,這表示停用引號支援。

如果在引號欄位中找到兩個連續的 quotechar 實例,則第一個會被視為逸出字元。請參閱範例。

在 1.23.0 版本中新增。

likearray_like,選用

參考物件,允許建立非 NumPy 陣列的陣列。如果作為 like 傳入的類陣列物件支援 __array_function__ 通訊協定,則結果將由它定義。在這種情況下,它確保建立與透過此引數傳入的物件相容的陣列物件。

在 1.20.0 版本中新增。

回傳:
outndarray

從文字檔讀取的資料。

參見

loadfromstringfromregex
genfromtxt

載入已處理遺失值的資料(如指定)。

scipy.io.loadmat

讀取 MATLAB 資料檔案

註解

此函數旨在成為簡單格式檔案的快速讀取器。genfromtxt 函數提供更複雜的處理方式,例如,具有遺失值的行。

輸入文字檔中的每一列都必須具有相同數量的值,才能讀取所有值。如果所有列的值數量不相同,則可以透過 usecols 指定欄來讀取最多 n 欄的子集(其中 n 是所有列中存在的最小值的數量)。

Python float.hex 方法產生的字串可以用作浮點數的輸入。

範例

>>> import numpy as np
>>> from io import StringIO   # StringIO behaves like a file object
>>> c = StringIO("0 1\n2 3")
>>> np.loadtxt(c)
array([[0., 1.],
       [2., 3.]])
>>> d = StringIO("M 21 72\nF 35 58")
>>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'),
...                      'formats': ('S1', 'i4', 'f4')})
array([(b'M', 21, 72.), (b'F', 35, 58.)],
      dtype=[('gender', 'S1'), ('age', '<i4'), ('weight', '<f4')])
>>> c = StringIO("1,0,2\n3,0,4")
>>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True)
>>> x
array([1., 3.])
>>> y
array([2., 4.])

converters 引數用於指定在剖析之前預處理文字的函數。converters 可以是一個字典,將預處理函數對應到每個欄

>>> s = StringIO("1.618, 2.296\n3.141, 4.669\n")
>>> conv = {
...     0: lambda x: np.floor(float(x)),  # conversion fn for column 0
...     1: lambda x: np.ceil(float(x)),  # conversion fn for column 1
... }
>>> np.loadtxt(s, delimiter=",", converters=conv)
array([[1., 3.],
       [3., 5.]])

converters 可以是一個可呼叫物件,而不是字典,在這種情況下,它會套用至所有欄

>>> s = StringIO("0xDE 0xAD\n0xC0 0xDE")
>>> import functools
>>> conv = functools.partial(int, base=16)
>>> np.loadtxt(s, converters=conv)
array([[222., 173.],
       [192., 222.]])

此範例顯示如何使用 converters 將帶有尾隨減號的欄位轉換為負數。

>>> s = StringIO("10.01 31.25-\n19.22 64.31\n17.57- 63.94")
>>> def conv(fld):
...     return -float(fld[:-1]) if fld.endswith("-") else float(fld)
...
>>> np.loadtxt(s, converters=conv)
array([[ 10.01, -31.25],
       [ 19.22,  64.31],
       [-17.57,  63.94]])

將可呼叫物件用作轉換器對於處理具有不同格式的值(例如,帶有底線的浮點數)特別有用

>>> s = StringIO("1 2.7 100_000")
>>> np.loadtxt(s, converters=float)
array([1.e+00, 2.7e+00, 1.e+05])

此概念可以擴展到自動處理以許多不同格式指定的值,例如十六進位值

>>> def conv(val):
...     try:
...         return float(val)
...     except ValueError:
...         return float.fromhex(val)
>>> s = StringIO("1, 2.5, 3_000, 0b4, 0x1.4000000000000p+2")
>>> np.loadtxt(s, delimiter=",", converters=conv)
array([1.0e+00, 2.5e+00, 3.0e+03, 1.8e+02, 5.0e+00])

- 符號在數字之後的格式

>>> s = StringIO("10.01 31.25-\n19.22 64.31\n17.57- 63.94")
>>> conv = lambda x: -float(x[:-1]) if x.endswith("-") else float(x)
>>> np.loadtxt(s, converters=conv)
array([[ 10.01, -31.25],
       [ 19.22,  64.31],
       [-17.57,  63.94]])

使用 quotechar 參數啟用對引號欄位的支援。當註解和定界符號字元出現在由 quotechar 劃分的引號項目中時,會被忽略

>>> s = StringIO('"alpha, #42", 10.0\n"beta, #64", 2.0\n')
>>> dtype = np.dtype([("label", "U12"), ("value", float)])
>>> np.loadtxt(s, dtype=dtype, delimiter=",", quotechar='"')
array([('alpha, #42', 10.), ('beta, #64',  2.)],
      dtype=[('label', '<U12'), ('value', '<f8')])

引號欄位可以由多個空白字元分隔

>>> s = StringIO('"alpha, #42"       10.0\n"beta, #64" 2.0\n')
>>> dtype = np.dtype([("label", "U12"), ("value", float)])
>>> np.loadtxt(s, dtype=dtype, delimiter=None, quotechar='"')
array([('alpha, #42', 10.), ('beta, #64',  2.)],
      dtype=[('label', '<U12'), ('value', '<f8')])

引號欄位中兩個連續的引號字元會被視為單個逸出字元

>>> s = StringIO('"Hello, my name is ""Monty""!"')
>>> np.loadtxt(s, dtype="U", delimiter=",", quotechar='"')
array('Hello, my name is "Monty"!', dtype='<U26')

當所有列不包含相等數量的值時,讀取欄的子集

>>> d = StringIO("1 2\n2 4\n3 9 12\n4 16 20")
>>> np.loadtxt(d, usecols=(0, 1))
array([[ 1.,  2.],
       [ 2.,  4.],
       [ 3.,  9.],
       [ 4., 16.]])