Numba 中 Python 列表的基本问题;这是怎么回事?

Basic trouble with Python lists in Numba; what's going on?

我是 Numba 的初学者。对于我的生活,我无法获得 Numba 函数来操作一个简单的列表。
哎呀,我什至不知道如何指定签名。

举个例子。怎么了? (什么是 "reflected list"?)我该如何解决?

from numba import *
from numba.types import *

@jit(List(int64)(List(int64)), nopython=True)
def foo(a): a[0] += a[0]; return a

foo([1])

给予

Traceback (most recent call last):
  File "<pyshell#5>", in <module>
    foo([1])
  File "numba\dispatcher.py", line 219, in _explain_matching_error
    raise TypeError(msg)
TypeError: No matching definition for argument type(s) reflected list(int64)

我还没有找到关于这个主题的任何文档,但是从我 Googled the topic and dug through the source code 时出现的事情来看,"reflected" 列表是一个列表,其中对列表的更改必须是可见的(反映)在 Python 中完成 JITted 函数后。由于我不知道的原因,在 Numba 类型系统中,反射列表被视为与非反射列表不同的类型。这个概念可能特定于 nopython 模式;我不确定,我无法测试它。

您已声明您的函数采用非反射列表,但它需要采用反射列表。您需要将 reflected=True 添加到内部 List(int64) 调用,可能还需要将外部调用添加到