同时使用 python3 和 python 2.7 时出现 numba 类型错误

numba type error when using both python3 and python 2.7

我有两个 python 环境(python3 和 python2.7),我用它们来测试涉及 numba 的程序。尽管 Python 的版本,我得到了相同的 TypeError 消息,而我的朋友告诉我,如果他使用 Python 2.7,程序只会抛出错误,但在他的 Python3 设置中工作.

错误如下:

TypeError: No matching definition for argument type(s) int64, int64, int64, array(float64, 3d, C), array(int64, 2d, C)

我已经尝试在虚拟 Python3 环境中更新包,但它仍然不起作用。代码有点太长,但我的问题只是关于为什么我的设置不能让 numba 函数起作用。任何建议将不胜感激。

如果您查看错误消息,它告诉您 nbody 的输入与您指定的签名不匹配(我 运行 它在 timeit 调用以使其更明确)。看起来好像您在默认为 64 位的机器上工作,但您说 body_pairs 应该是 int32[:,:]

解决方法是在创建这个变量时明确指定类型:

BODY_PAIRS = np.array(list(itertools.combinations(np.arange(BODIES.shape[0]), 2)), dtype=np.int32)

注意 dtype 的规范。