2016-06-21 23 views
1

私は '年齢'と 'Z'の値でインデックスを作成できるように、不規則な多次元データを持っています。多次元numpy配列を持つpythonデータ構造

それぞれ '年齢' の

、および 'Z' 私は100件の波長とassoc'dフラックスの配列(元のデータ)を有する:この例ではSO

age = np.array([10,20,30,40,50]) 
Z  = np.array([7,8]) 
waveln = np.array([np.array([a for a in arange(100)]) for b in arange(2*5)]) 
flux = np.array([np.array([a*10 for a in arange(100)]) for b in arange(2*5)]) 

をwaveln [0](配列100個のエントリ)とフラックス[0]

myData['age' = 10, 'Z' = 7]['waveln'] # which I want to return the waveln array 

と、私はこれを設定する方法を

myData['age' = 10, 'Z' = 7]['flux'] # which I want to return the flux array 

ようなものでassoc'dになるだろう?問題は

Thxを、

+1

'pandas'ライブラリで利用できるデータ構造の1つを探しているような気がします。 http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe階層的にインデックスされたデータフレームは、多次元データ構造のように動作できます。 'pandas'は' numpy'の上に構築されていますので、あなたが慣れていなければ簡単にできます。 –

答えて

2

あなたはwavelnが10x100 2次元配列ではなく、配列の配列で実現するか...年齢及びZの両方が浮いている、ありますか?あなたは本当にwavelnが10個の配列を含む1次元配列にしたい場合は、あなたが建設DTYPE代替オブジェクトを使用する必要があります

np.repeat(np.arange(100)[None,:],10,axis=0) 

と同じように構築することができます。

flux=waveln*10と定義されていますが、それは単なる例示的な値だと思われますが。

しかし、それはもっと面白いですさんはwavelnを定義してみましょう - そう各行は異なる

In [983]: waveln=np.arange(10)[:,None]+np.arange(100)[None,:] 

である私はあなたのZage配列からnp.ix_とインデックスタプルを構築することができます。

In [984]: np.ix_(Z,age) 
Out[984]: 
(array([[7], 
     [8]]), array([[10, 20, 30, 40, 50]])) 

In [985]: waveln[np.ix_(Z,age)] 
Out[985]: 
array([[17, 27, 37, 47, 57], 
     [18, 28, 38, 48, 58]]) 

だから、この2行5列を選択しています。

myData['age' = 10, 'Z' = 7]['waveln']を実行するには、__getitem__メソッドを使用してクラスを作成します。 Python[]の式をこのメソッドに渡されるタプルに変換します。しかし、それはその=シンタックスで窒息するでしょう。索引付け式でキーワード引数を使用することはできません。正しい辞書構文は{'age':17, 'Z':7}またはdict(age=16, Z=12)です。

ix_が定義されている/numpy/lib/index_tricks.pyファイルを調べて、カスタムクラスを作成する方法のアイデアを得る。

myData[age = 10, Z = 7, var = 'waveln')では、ストレート関数定義を使用できます。

関連する問題