7

でロードしたい大きなテーブル (テキスト形式の数値) がありますnumpy.genfromtxt()最初のn列、たとえば 5を無視したいと思います。テーブルのサイズ (行または列の数) が事前にわかりません。

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

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

また、ファイルを調べて、列の数を見つけてからusecols引数を作成することもできますが、それはやや面倒です。

これをエレガントに解決する方法についてのアイデアはありますか? 使用できる隠し/文書化されていない引数はありますか?

4

2 に答える 2

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)
于 2012-11-09T16:08:59.750 に答える
12

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

np.genfromtxt(" ".join(ln.split()[N:]) for ln in f)
于 2012-11-09T16:05:03.850 に答える