【问题标题】:numpy.loadtxt Skipping multiple rowsnumpy.loadtxt 跳过多行
【发布时间】:2013-11-30 15:28:15
【问题描述】:

我相信这个帖子的标题解释了我在寻找什么。我很想知道跳过多行的语法是什么;我似乎在任何地方都找不到这样的信息。

【问题讨论】:

  • 你试过切片吗?
  • 我不太明白你的意思。
  • 您声明标题解释了您需要什么,但下面答案中的 cmets 表明需要更多信息(前 n 行、命名行、等间隔...)
  • 不,你看,我说我“相信”这个标题就足够了,但显然不是。我认为这可能归因于我对 python 完全一无所知——事实上,对一般编程一无所知。

标签: python numpy syntax


【解决方案1】:

使用help(np.loadtxt)。您会发现skiprows 参数允许您跳过第一行N

In [1]: import numpy as np

In [2]: help(np.loadtxt)
Help on function loadtxt in module numpy.lib.npyio:

loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
    ...
    skiprows : int, optional
        Skip the first `skiprows` lines; default: 0.

因此,要跳过 N 行,您会说

np.loadtxt(fname, skiprows=N)

如果您需要过滤除第一行以外的行,请使用np.genfromtxt,它可以将产生字符串的迭代器作为其第一个参数:

with open(filename, 'r') as f:
    lines = (line for line in f if predicate(line))
    arr = np.genfromtxt(lines)

要跳过中间的一系列行,例如第 47--50 行,您可以像这样使用itertools

import itertools as IT

with open(filename, 'r') as f:
    lines = IT.chain(IT.islice(f, 46), IT.islice(f, 4, None))
    arr = np.genfromtxt(lines)

【讨论】:

  • 但是它怎么知道要跳过哪 N 行呢?
  • 那么,使用 np.genfromtxt,如果我想跳过第 47、48、49 和 50 行,我会在参数中输入 lines(47,48,49,50) 吗?跨度>
  • 不,正如help(np.loadtxt) 中所述,skiprows 仅对跳过第一行 N 有用。要跳过文件中间的行,您需要形成一个迭代器,它只产生您想要的行。我已经编辑了上面的帖子以显示一种这样的方式。
【解决方案2】:

如果您已经知道要跳过的行号,那么您也可以使用:

import numpy as np
InputFile = './Filename.txt'
Dataset = np.loadtxt(InputFile, skiprows= 0 + 1 + 2 + 3 + 4 + 5)
print(Dataset)

这将跳过前五行并打印剩余的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多