2012-04-07 17 views
1

私はカスタムオブジェクトの配列が手に入りました。それらのオブジェクトの特定の属性の値を含む新しい配列を取得するにはどうすればよいですか?numpy配列でのオブジェクトのプロパティへのアクセス

例:

import numpy as np 

class Pos(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

arr = np.array([ Pos(0,1), Pos(2,3), Pos(4,5) ]) 

# Magic line 
xy_arr = .... # arr[ [arr.x,arr.y] ] 

print xy_arr 
# array([[0,1], 
     [2,3], 
     [4,5]]) 

私はこのような動作のための私の動機は、配列内のオブジェクトの質量中心を計算することであることを追加する必要があります。

+2

このために配列を使用する理由はありますか?これは本当にnumpy配列の使用を意図したものではなく、このような使用は、通常、Pythonリストを使用するよりも扱いにくく、遅くなります。 –

+0

私は索引付けのために配列を使用していました。私は 'arr'と同じ形の浮動小数点配列' A'を持っており、 'A'の閾値に基づいて' arr'の要素を選択しなければなりません – ajwood

答えて

1

通常、複数の数量が一緒に属していて、インデックスの数を数えることで恩恵を受けたい場合は、レコード配列を使用します。あなたが追加/削除操作をたくさん行うと、numpyはスピードの点ではむしろ効果的ではないかもしれないことに注意してください。

私が正しくあなたのコメントを理解している場合、これは、2つの値を第3によって選択されている例です。

import numpy as np 

# create a table for your data 
dt = np.dtype([('A', np.double), ('x', np.double), ('y', np.double)]) 
table = np.array([(1,1,1), (2,2,2), (3,3,3)], dtype=dt) 

# define a selection mask 
selection = table['A'] > 1.5 
columns = ['x', 'y'] 

print table[selection][columns] 

素敵な副作用がh5pyを使用して、このテーブルを保存すると、あなたのデータのように非常に簡単で便利であるということです既にラベル付けされています。

関連する問題