Numba 具有通过 JIT 编译加速循环的惊人能力。然而,关键的转折是,当使用 numpy 时,不允许创建任何新数组。幸运的是,大多数 numpy 函数都包含一个可选out
参数,用于将输出写入 -- except 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 数组进行排序?