7

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

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

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

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

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

4

2 回答 2

21

对于旧版本的 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)
于 2012-11-09T16:08:59.750 回答
12

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

np.genfromtxt(" ".join(ln.split()[N:]) for ln in f)
于 2012-11-09T16:05:03.850 回答