我有一个大表(文本格式的数字),我想用numpy.genfromtxt()
加载。我想忽略第一个 n 列,比如说5.我事先不知道表的大小(行数或列数)。
我看到genfromtxt()
有一个选项skip_header
,它允许跳过指定数量的标题行,但似乎列没有这样的选项。有一个usecols
选项,但我必须指定我想要保留的列号,而不是我想要丢弃的列号(我不提前知道这个号码)。
显然我可以加载整个东西,然后扔掉第一个 n 列,但这并不优雅,在内存方面也很浪费。
此外,我可以在文件中找到峰值,找到列数,然后构造usecols
参数,但这很麻烦。
关于如何优雅地解决这个问题的任何想法?我可以使用一些隐藏/未记录的参数吗?
答案 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)