gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:31:21 28 4
gpt4 key购买 nike

我正在尝试对我的一个函数使用提前编译,因此我需要提供该函数的签名。当我使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com