【问题标题】:Skip a specified number of columns with numpy.genfromtxt()使用 numpy.genfromtxt() 跳过指定数量的列
【发布时间】:2012-11-09 15:58:45
【问题描述】:

我有一个大表(文本格式的数字),我想用numpy.genfromtxt() 加载它。我想忽略前 n 列,比如 5。我事先不知道表的大小(行数或列数)。

我看到genfromtxt() 有一个选项skip_header 允许跳过指定数量的标题行,但似乎列没有这样的选项。有一个usecols 选项,但我必须指定我想保留的列号,而不是我想丢弃的列号(我事先不知道这个数字)。

显然我可以只加载整个内容,然后丢弃前 n 列,但这并不优雅并且在内存方面是浪费的。

我也可以进入文件,找到列数,然后构造usecols 参数,但这相当混乱。

关于如何优雅地解决这个问题的任何想法?我可以使用一些隐藏/未记录的论点吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    对于旧版本的 numpy,查看第一行以发现列数并不难:

    import numpy as np
    with open(fname, 'r') as f:
        num_cols = len(f.readline().split())
        f.seek(0)
        data = np.genfromtxt(f, usecols = range(5,num_cols))
    print(data)
    

    【讨论】:

      【解决方案2】:

      在 Numpy 的较新版本中,np.genfromtxt 可以采用可迭代参数,因此您可以将正在读取的文件包装在生成行的生成器中,跳过第一个 N 列。如果你的数字是空格分隔的,那就是

      np.genfromtxt(" ".join(ln.split()[N:]) for ln in f)
      

      【讨论】:

      • 怎么了? firstImage = np.genfromtxt (" ".join(ln.split()[1:]) for ln in path+next(iter(filelist)))
      猜你喜欢
      • 2015-06-25
      • 2013-11-30
      • 2018-06-13
      • 2022-01-09
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      相关资源
      最近更新 更多