使用numpy.genfromtxt()跳过指定数量的列

时间:2012-11-09 15:58:46

标签: python numpy

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

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

显然我可以加载整个东西,然后扔掉第一个 n 列,但这并不优雅,在内存方面也很浪费。

此外,我可以在文件中找到峰值,找到列数,然后构造usecols参数,但这很麻烦。

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:10)

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

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