同时使用 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
的规范。
我有两个 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
的规范。