Numba似乎反对元组中的负动态索引。
@jit
def test_fn():
tup = (3,2,4,6,2)
total = 0
for idx in range(5):
total += tup[-idx]
return total
给出
IndexError: tuple index out of range
,但没有@jit
装饰器当然可以。这是已知的/期望的/不可避免的行为吗? 最佳答案
这肯定看起来像是一个奇怪的错误。如果我对forceobj=True
使用numba.jit
参数,或者如果给locals
传递了给定适当类型的任何局部变量tup
,total
或idx
,则Numba函数将起作用。
更令人困惑的是,如果我只是简单地添加对numba.typeof(idx)
的调用,那么它也可以工作,而无需在对jit
的调用中添加额外的参数。不幸的是,当我使用这些修改从脚本的命令行运行numba --annotate
时,看起来它们全部导致所有内容都被视为pyobject
。
numba 0.40.0就是全部。
以下是我在脚本中尝试过的一些更改:
# file 'test_numba.py'
import numba
import numpy as np
@numba.jit()
# @numba.jit(forceobj=True)
# @numba.jit(locals={'tup': tuple, 'idx': np.int64, 'total': np.int64})
# also tried mixing and matching about 'locals' with and without the
# numba.typeof calls below, and used `numba --annotate test_numba.py`
# from command line to inspect annotated types.
def test_fn():
tup = (3,2,4,6,2)
total = 0
print(numba.typeof(tup))
print(numba.typeof(total))
for idx in range(5):
print(numba.typeof(idx))
total += tup[-idx]
return total
if __name__ == "__main__":
test_fn()
关于python - Numba中的负动态指数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52777695/