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, str 列表, 生成器
要读取的文件、文件名、列表或生成器.如果文件扩展名是
.gz
或.bz2
,则首先解压缩文件.请注意,生成器必须返回字节或字符串.列表中的字符串或生成器产生的字符串被视为行.- dtype数据类型, 可选
结果数组的数据类型;默认值:float.如果这是一个结构化数据类型,则结果数组将是1维的,并且每一行将被解释为数组的一个元素.在这种情况下,使用的列数必须与数据类型中的字段数匹配.
- commentsstr 或 str 序列 或 None,可选
用于表示注释开始的字符或字符列表.None 表示没有注释.为了向后兼容,字节字符串将被解码为 ‘latin1’.默认值是 ‘#’.
- delimiterstr, 可选
用于分隔值的字符.为了向后兼容,字节字符串将被解码为 ‘latin1’.默认是空白.
在 1.23.0 版本发生变更: 只支持单字符分隔符.换行符不能用作分隔符.
- converters字典或可调用对象,可选
转换器函数以自定义值解析.如果 converters 是可调用的,该函数将应用于所有列,否则它必须是一个将列号映射到解析器函数的字典.有关更多详细信息,请参见示例.默认值:None.
在 1.23.0 版本发生变更: 添加了将单个可调用对象应用于所有列的能力.
- skiprowsint, 可选
跳过前 skiprows 行,包括注释;默认值:0.
- usecols整数或序列,可选
要读取哪些列,其中0是第一列.例如,``usecols = (1,4,5)`` 将提取第2、第5和第6列.默认值None将读取所有列.
在 1.11.0 版本发生变更: 当需要读取单个列时,可以使用整数而不是元组.例如
usecols = 3
读取第四列的方式与usecols = (3,)
相同.- unpack布尔值, 可选
如果为真,返回的数组是转置的,因此可以使用
x, y, z = loadtxt(...)
进行解包.当与结构化数据类型一起使用时,为每个字段返回数组.默认为假.- ndminint, 可选
返回的数组将至少有 ndmin 维度.否则,单维轴将被压缩.合法值:0(默认),1 或 2.
在 1.6.0 版本加入.
- encodingstr, 可选
用于解码输入文件的编码.不适用于输入流.特殊值 ‘bytes’ 启用向后兼容的工作区,确保在可能的情况下接收字节数组作为结果,并将 ‘latin1’ 编码的字符串传递给转换器.覆盖此值以接收 Unicode 数组并将字符串作为输入传递给转换器.如果设置为 None,则使用系统默认值.默认值是 ‘bytes’.
在 1.14.0 版本加入.
在 2.0 版本发生变更: 在 NumPy 2 之前,默认值是
'bytes'
,这是为了与 Python 2 兼容.现在默认值是None
.- max_rowsint, 可选
读取 skiprows 行之后的 max_rows 行内容.默认是读取所有行.注意,不包含数据的空行(如空行和注释行)不计入 max_rows,而在 skiprows 中这些行是计数的.
在 1.16.0 版本加入.
在 1.23.0 版本发生变更: 不包含数据的行,包括注释行(例如,以 ‘#’ 开头或通过 comments 指定的行)不计入 max_rows.
- quotecharunicode 字符或 None,可选
用于表示引用项开始和结束的字符.在引用项内出现的分隔符或注释字符将被忽略.默认值是
quotechar=None
,这意味着引用支持被禁用.如果在引用的字段中找到两个连续的 quotechar 实例,则第一个被视为转义字符.请参见示例.
在 1.23.0 版本加入.
- like类似数组, 可选
引用对象以允许创建不是 NumPy 数组的数组.如果作为
like
传递的类数组对象支持__array_function__
协议,结果将由它定义.在这种情况下,它确保创建一个与此参数传递的对象兼容的数组对象.在 1.20.0 版本加入.
- 返回:
- outndarray
从文本文件中读取的数据.
参见
load
,fromstring
,fromregex
genfromtxt
按指定处理缺失值加载数据.
scipy.io.loadmat
读取 MATLAB 数据文件
备注
此函数旨在成为一种用于简单格式文件的快速读取器.`genfromtxt` 函数提供了对例如缺失值行的更复杂处理.
输入文本文件中的每一行必须具有相同数量的值,才能读取所有值.如果所有行没有相同数量的值,可以通过 usecols 指定列来读取最多 n 列的子集(其中 n 是所有行中存在的最少值数量).
在 1.10.0 版本加入.
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.]])