Numba には、JIT コンパイルでループを高速化する驚くべき機能があります。ただし、重要なねじれは、numpy を使用する場合、新しい配列の作成が許可されないことです。幸いなことに、ほとんどの numpy 関数には、出力を --except に書き込むためのオプションのout
パラメーターが含まれていますnumpy.sort
。最も明白な代替案は ですnumpy.ndarray.sort
。
@njit("void(f8[:])")
def sort_inplace(arr):
arr.sort()
しかし、これはコンパイルに失敗し、
...
...
...
/Users/duckworthd/anaconda/lib/python2.7/site-packages/numba/typeinfer.pyc in propagate(self)
293 print("propagate".center(80, '-'))
294 oldtoken = newtoken
--> 295 self.constrains.propagate(self.context, self.typevars)
296 newtoken = self.get_state_token()
297 if config.DEBUG:
/Users/duckworthd/anaconda/lib/python2.7/site-packages/numba/typeinfer.pyc in propagate(self, context, typevars)
112 raise
113 except Exception as e:
--> 114 raise TypingError("Internal error:\n%s" % e, constrain.loc)
115
116
TypingError: Internal error:
Attribute 'sort' of array(float64, 1d, A) is not typed
並べ替えアルゴリズムを再実装する以外に、JIT コンパイルされた numba ループで numpy 配列を並べ替える方法はありますか?