2016-04-15 17 views
2

私は各ループの代わりにnumpy配列を使用していくつかのPythonコードを最適化するために取り組んでいます。 numpy配列のスライス中にクラスからフィールドにアクセスする方法はありますか?オブジェクトデータをアクセスするnumpy配列をスライス

class foo: 

    the_int = 0 

    def __init__(self, i): 
     self.bar = i 

one, two = foo(5), foo(10) 
ar = array([one, two]) 

int_array = ar[0:2].the_int 

#I want int_array = [5, 10] 

それはそのようにできない場合は、どのように私は、効率的に各エントリから「the_int」を集め、「AR」をループループごと使用せずに私の「int_array」変数を生成するのでしょうか?

おかげで、 カイル

答えて

2

なぜあなたはPyObjectsを保存するためにnumpyの配列を使用していますか?あなたが考えるパフォーマンスの向上は得られません。 hereを参照してください。

class foo: 

    the_int = 0 

    def __init__(self, i): 
     self.bar = i 

one, two = foo(5), foo(10) 

ar = [one, two] 

int_array = [i.bar for i in ar[0:2]] 
+0

ああ、理にかなって:リストを使用して

、あなたの代わりに、リストの内包表記を使用することができます。数の少ない配列はオブジェクトを格納すべきでないことを認識していませんでした。ですから、各ループのためにオブジェクトを避ける方法はありませんか? –

+1

構文は似ていますが、私が使用しているリストの理解は、実際にforループではありません。 – user3684792

+0

ええ、ちょうどそれに気付きました。私のオリジナルのforループよりもはるかに高速です。あなたの助けをありがとう! –