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

8
我有一张大表格(文本格式中的数字),我想用numpy.genfromtxt()来加载它。我想忽略前n列,比如说5列。我不知道表格的大小(行数或者列数)。
我发现genfromtxt()有一个选项skip_header,可以跳过指定数量的标题行,但好像没有用于列的类似选项。虽然有一个usecols选项,但是我必须指定要保留的列号码,而不是我想舍弃的列(我事先不知道这个数字)。
显然,我可以将整个表格加载进来,然后扔掉前n列,但这不够优雅,并且会浪费内存。
我也可以查看文件,找到列数,然后构建usecols参数,但这样做相当混乱。
你有什么优雅的解决方案吗?是否有一些隐藏/未记录的参数可以使用?
2个回答

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

12
在较新版本的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))) - Klasik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接