Python 当使用@jit时,这是一种0.50的行为

Python 当使用@jit时,这是一种0.50的行为,python,jit,numba,Python,Jit,Numba,以下功能在Numba 0.38上运行良好: @jit 定义ndiff(x): s=x.size r=np.empty(s,dtype=np.bool) 对于范围(1,s)内的i: r[i]=x[i]-x[i-1] 返回r arr=np.array([True,True,True,False,False,False,True,True,True]) _ndiff(arr) #>np.数组([3,7]) 但是,当使用Numba 0.50时,它会输出大量错误: ./application.py:18

以下功能在Numba 0.38上运行良好:

@jit
定义ndiff(x):
s=x.size
r=np.empty(s,dtype=np.bool)
对于范围(1,s)内的i:
r[i]=x[i]-x[i-1]
返回r
arr=np.array([True,True,True,False,False,False,True,True,True])
_ndiff(arr)
#>np.数组([3,7])
但是,当使用Numba 0.50时,它会输出大量错误:

./application.py:18: NumbaWarning: 
Compilation is falling back to object mode WITH looplifting enabled because Function "_ndiff" failed type inference due to: Unknown attribute 'type' of type array(bool, 1d, C)

File "application.py", line 23:
def _ndiff(x):
    <source elided>
    s = x.size
    r = np.empty(s, dtype=x.type) 
    ^

During: typing of get attribute at ./application.py (23)

File "application.py", line 23:
def _ndiff(x):
    <source elided>
    s = x.size
    r = np.empty(s, dtype=x.type) 
    ^

  @jit
./application.py:18: NumbaWarning: 
Compilation is falling back to object mode WITHOUT looplifting enabled because Function "_ndiff" failed type inference due to: cannot determine Numba type of <class 'numba.core.dispatcher.LiftedLoop'>

File "application.py", line 24:
def _ndiff(x):
    <source elided>
    r = np.empty(s, dtype=x.type) 
    for i in range(1, s): 
    ^

  @jit
/home/ubuntu/anaconda3/envs/py38/lib/python3.8/site-packages/numba/core/object_mode_passes.py:177: NumbaWarning: Function "_ndiff" was compiled in object mode without forceobj=True, but has lifted loops.

File "application.py", line 22:
def _ndiff(x):
    <source elided>
    s = x.size
    ^

  warnings.warn(errors.NumbaWarning(warn_msg,
/home/ubuntu/anaconda3/envs/py38/lib/python3.8/site-packages/numba/core/object_mode_passes.py:187: NumbaDeprecationWarning: 
Fall-back from the nopython compilation path to the object mode compilation path has been detected, this is deprecated behaviour.

For more information visit http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit

File "application.py", line 22:
def _ndiff(x):
    <source elided>
    s = x.size
    ^
/application.py:18:NumbaWarning:
由于类型数组(bool,1d,C)的未知属性“type”,函数“\u ndiff”未能进行类型推断,编译正在退回到启用循环提升的对象模式
文件“application.py”,第23行:
定义ndiff(x):
s=x.size
r=np.empty(s,dtype=x.type)
^
期间:在./application.py(23)处键入get属性
文件“application.py”,第23行:
定义ndiff(x):
s=x.size
r=np.empty(s,dtype=x.type)
^
@准时制
/应用程序。py:18:编号:
编译正在退回到对象模式,但未启用循环提升,因为函数“\u ndiff”的类型推断失败,原因是:无法确定
文件“application.py”,第24行:
定义ndiff(x):
r=np.empty(s,dtype=x.type)
对于范围(1,s)内的i:
^
@准时制
/home/ubuntu/anaconda3/envs/py38/lib/python3.8/site packages/numba/core/object\u mode\u passs.py:177:NumbaWarning:Function“\u ndiff”是在对象模式下编译的,没有forceobj=True,但有提升循环。
文件“application.py”,第22行:
定义ndiff(x):
s=x.size
^
警告。警告(错误。警告),
/home/ubuntu/anaconda3/envs/py38/lib/python3.8/site packages/numba/core/object_mode_passes.py:187:numbadepreaction警告:
检测到从nopython编译路径返回到对象模式编译路径,这是不推荐的行为。
欲了解更多信息,请访问http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-使用jit时对象模式的回退行为
文件“application.py”,第22行:
定义ndiff(x):
s=x.size
^
基本上,它抱怨回到对象模式,因为他对这里找到的几乎所有东西都不满意。尽管有这些警告,但使用1000000大小的数组测试
@jit
函数可以绝对确定它绝对不在对象模式下运行(尽管有这些警告,但它只在几微秒内运行,而纯Python版本则需要永远的时间)

这个版本的Numba有什么不同吗