python - numba 中反射列表签名的问题

标签 python numba

我正在尝试对我的一个函数使用提前编译,因此我需要提供该函数的签名。当我使用 numba.typeof() 时,我会返回一个变量的反射列表(array(float64, 2d, A)) 。我看过这个帖子Basic trouble with Python lists in Numba; what's going on?尝试找出签名,但我遇到了错误。

在尝试让 AOT 编译工作之前,我只是想让 @njit 使用签名。

我已经尝试过:

@njit(float64[:,:,:](int32, list(float64), float64[:,:,:]), reflected=True)

如何修复我的签名以使其正常工作?谢谢

最佳答案

您需要正确指定列表的签名。这意味着解决代码中的一些问题:

  • reflected=True 必须是调用 List 类型类的参数
  • 我不知道如何以及在何处导入 list。如果您没有导入它,则它不是 numba 类型。如果您确实将某些内容导入为 list,那么您就覆盖了 python 内置模块 list。您不应该永远这样做。因此,我会编写 nb.types.List(...) 而不是 list,假设您使用 import numba as nb 导入 numba。如果您使用 from numba import * 导入 numba:这是您应该不惜一切代价避免的另一件事。
  • 需要更精确地指定存储在列表中的 float64 类型。您的反射列表中有一个 array(float64, 2d, A) 类型的数组。这意味着您的列表签名需要准确包含此数组类型。在这种情况下,它看起来像:nb.float64[:, :]。对于其他内存布局,例如 C- 或 F-,请查看 this post .

因此您生成的签名将如下所示:

@nb.njit(nb.float64[:, :, :](nb.int32, nb.types.List(nb.float64[:, :], reflected=True), nb.float64[:, :, :]))

再次假设您使用 import numba as nb 导入 numba,并且您的数组的类型为 array(float64, 2d, A)

关于python - numba 中反射列表签名的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53900084/

相关文章:

python - 安装 shapefile/shapelib 未通过 conda 或 pip 找到

c# - 通过 C#、Python 和 T-SQL 的字节数组

python - 使用 pcapy/impacket 更改数据包数据

python - numba 的表现(我做错了什么吗?)

python - Python 中的快速按位获取列

python - 用python解压二进制数据

python - MySQL 连接、XAMPP 和 ODBC

python - Numba 给出 : ' TypingError: %r not allowed in a homogenous sequence'

python - Python:重写循环的numpy数学函数以在GPU上运行

python-3.x - 为什么numba cuda调用几次后运行速度变慢?