2012-11-09 83 views
5

我有一个大表(文本格式的数字),我想用numpy.genfromtxt()加载。我想忽略第一个ñ列,说我真的不知道该表的提前大小(行或列数)。跳过带有numpy.genfromtxt指定的列数()

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

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

而且我能高峰到文件中,找到的列数,然后构建usecols说法,但这是相当混乱。

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

回答

10

在较新版本的Numpy中,np.genfromtxt可以采用可迭代的参数,因此您可以将正在读取的文件打包到生成行的生成器中,从而跳过第一列N列。如果您的号码是用空格分开的,这有点像

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

不错,我没我不知道。 – Bitwise

+0

有什么不对? firstImage = np.genfromtxt(””。加入(ln.split()[1:]),用于在路径LN +下一个(ITER(文件列表))) – Klasik

17

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

7 upvotes去,直到numpy的金徽章,unutbu :) –

+0

哇噢!我不知道:) – unutbu

+2

@larsmans我会为此赞成;) – Bitwise