2012-11-09 12 views
5

私はnumpy.genfromtxt()でロードしたい大きなテーブル(テキスト形式の数値)を持っています。私は最初にnの列を無視したいと思います。たとえば、テーブルのサイズ(行数または列数)はわかりません。numpy.genfromtxt()で指定された数の列をスキップ

genfromtxt()には、指定した数のヘッダー行をスキップすることができるオプションskip_headerがありますが、そのようなオプションはないようです。 usecolsオプションがありますが、削除したい列番号ではなく、保持したい列番号を指定する必要があります(あらかじめこの番号はわかりません)。

明らかに、私はすべてをロードして最初のnの列を捨てることができますが、これはエレガントではなく、メモリの面では無駄です。

また、ファイルにピークがあり、列の数を見つけてusecols引数を構成できますが、それはむしろ面倒です。

これをうまく解決する方法はありますか?私が使うことができるいくつかの隠された/文書化されていない議論がありますか?

答えて

10

新しいバージョンのNumpyでは、np.genfromtxtは反復可能な引数を取ることができるので、最初のN列をスキップして、読み込み中のファイルを行を生成するジェネレータでラップすることができます。あなたの番号はスペースで区切られている場合は、それがnumpyのの古いバージョンの

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

ニース、私はdidnのそれは分かりません。 – Bitwise

+0

何が間違っていますか?最初のイメージ= np.genfromtxt(+ "ln.split()[1:])は、パス上のln + next(iter(filelist))) – Klasik

17

のようなものだ、列の数を発見するために、最初の行で覗き見することは難しいことではありません。

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

ヌンキーのゴールドバッジ、unutbuまで行くための7アップボード:) –

+0

woohoo !私は知らなかった:) – unutbu

+2

@larsmans私はそれのためにupvote;) – Bitwise

関連する問題