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)[源代码]#

从文本文件加载数据.

参数:
fnamefile, str, pathlib.Path, list of str, generator

要读取的文件,文件名,列表或生成器.如果文件名扩展名为 .gz.bz2 ,则首先解压缩该文件.请注意,生成器必须返回字节或字符串.列表中的字符串或生成器产生的字符串被视为行.

dtypedata-type,可选

结果数组的数据类型; 默认值:float.如果这是一个结构化的数据类型,则结果数组将是一维的,并且每一行都将被解释为数组的一个元素.在这种情况下,使用的列数必须与数据类型中的字段数匹配.

commentsstr 或 str 序列或 None,可选

用于指示注释开始的字符或字符列表.None表示没有注释. 为了向后兼容,字节字符串将解码为“latin1”. 默认值为’#’.

delimiterstr, optional

用于分隔值的字符. 为了向后兼容,字节字符串将解码为“latin1”. 默认值为空格.

在 1.23.0 版本发生变更: 仅支持单个字符分隔符. 换行符不能用作分隔符.

convertersdict 或 callable,可选

用于自定义值解析的转换器函数. 如果 converters 是可调用的,则该函数将应用于所有列,否则它必须是一个将列号映射到解析器函数的dict. 有关更多详细信息,请参见示例. 默认值:None.

在 1.23.0 版本发生变更: 添加了传递单个可调用对象以应用于所有列的功能.

skiprows整数,可选

跳过前 skiprows 行,包括注释; 默认值:0.

usecolsint 或 序列, 可选

要读取的列,其中0是第一列. 例如, usecols = (1,4,5) 将提取第2,5和6列. 默认值None将读取所有列.

unpackbool, 可选

如果为True,则返回的数组将被转置,以便可以使用 x, y, z = loadtxt(...) 解包参数. 当与结构化数据类型一起使用时,将为每个字段返回数组. 默认值为False.

ndmin整数,可选

返回的数组将至少具有 ndmin 维度. 否则,单维轴将被压缩. 合法值:0(默认),1或2.

encodingstr, optional

用于解码输入文件的编码.不适用于输入流.特殊值 ‘bytes’ 启用向后兼容性变通方法,确保您尽可能收到字节数组作为结果,并将 ‘latin1’ 编码的字符串传递给转换器.覆盖此值以接收 unicode 数组并将字符串作为输入传递给转换器.如果设置为 None,则使用系统默认值.默认值为 None.

在 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, optional

参考对象以允许创建非NumPy数组的数组. 如果作为 like 传入的类数组支持 __array_function__ 协议,则结果将由它定义. 在这种情况下,它可以确保创建与通过此参数传入的数组对象兼容的数组对象.

在 1.20.0 版本加入.

返回:
outndarray

从文本文件读取的数据.

参见

load , fromstring , fromregex
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.]])