1

次の形式のファイルがあります。

# a, b, c
0.1   0   0
0.2 0.4 0.5
  4   5 0.9
0.3   0  10

これは 3 列のデータを含むファイルで、これらの列の名前はabおよびcです。

現在、これらのデータを読み取るために、次を使用しています。

def readdata(filename):
    a, b, c = np.loadtxt(filename, unpack=True)
    return a, b, c

しかし、その代わりに、最初の列を取得するために呼び出すことができるように、マップをreaddata返したいと思います。ファイルに新しい列 ( ) がある場合に、この関数を機能させたいと考えています。mydata{column title, numpy array}mydata["a"]d, e, f...

それを行う方法(不要なコピーをできるだけ避ける)?

4

3 に答える 3

1

このファイルで:

#a, b, c
0.1   0   0
0.2 0.4 0.5
  4   5 0.9
0.3   0  10

最初の行でヘッダー行が定義されていると仮定すると、Numpy では次のようにできます。

まず、ヘッダー行を読み取ります。

>>> with open('/tmp/testnp.txt','r') as f:
...    header=[n.strip() for n in f.readline().strip().lstrip('#').split(',')]
... 
>>> header
['a', 'b', 'c']

ここで、ヘッダーのフィールドと同じ名前の構造化配列を Numpy で作成します。

>>> import numpy as np
>>> struct=[(name,'float') for name in header]
>>> data=np.loadtxt('/tmp/testnp.txt',dtype=struct,comments='#')
>>> data
array([(0.1, 0.0, 0.0), (0.2, 0.4, 0.5), (4.0, 5.0, 0.9), (0.3, 0.0, 10.0)], 
      dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')])
>>> data['a']
array([ 0.1,  0.2,  4. ,  0.3])
于 2013-05-26T19:21:48.697 に答える