2017-11-29 10 views
2

@vectorizeはいつ使用しますか?numbaの@jitと@vectorizeの違いは何ですか?

私は@jitを試してみましたが、下記のコードの一部を示し、

from numba import jit 

@jit 
def kma(g,temp): 
    k=np.exp(-(g+np.abs(g))/(2*temp)) 
    return k 

が、私のコードは、アルゴリズムを加速していませんでした。どうして?

答えて

2

@vectorizeは、一度に1つの要素(スカラー)を配列に適用できる式を記述するために使用されます。 @jitデコレータはより一般的であり、あらゆるタイプの計算に使用できます。

ドキュメント内の他の利点の詳細な議論があります:

http://numba.pydata.org/numba-doc/latest/user/vectorize.html

あなたは、「なぜ私が使用して単純な反復ループをコンパイルするのではなく、これを通過するだろう自分自身を頼むかもしれません@ジットデコレータ? "答えは、NumPy ufuncsが自動的に縮小、蓄積、放送などの他の機能を取得することです。

あなたのコードがスピードアップされていない理由は、私が実行している操作がすでに低レベルコンパイルされたコードはnumpyのベクトル化操作の背後に座っています。

中間配列の作成を避けるために暗黙的ループをアンロールするといくらか節約されるかもしれませんが、通常numbaはnumpyで容易にベクトル化されない操作に優れています。

+0

numpyがすでにそれを処理しているため、上記のコードをjittedできないことを意味しますか? Numbaは一般的に 'forループ'で役に立ちますか? –

関連する問題