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

2024-05-12 19:07:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

显然,我可以加载整个内容,然后扔掉第一个n列,但这并不优雅,而且在内存方面是浪费的。

我还可以在文件中找到峰值,找到列数,然后构造usecols参数,但这相当混乱。

有什么好的办法来解决这个问题吗?是否有一些隐藏/未记录的论点可供我使用?


Tags: 内存文本格式numpy内容数量选项浪费数字
2条回答

在较新版本的Numpy中,np.genfromtxt可以接受一个iterable参数,因此可以将读取的文件包装在生成行的生成器中,跳过第一个N列。如果你的号码是空格分隔的

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

对于较旧版本的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)

相关问题 更多 >