python - numba 中反射列表签名的问题
问题描述
我正在尝试在我的一个函数上使用 Ahead-of-Time 编译,因此我需要为该函数提供签名。当我使用时,numba.typeof()
我会返回reflected list(array(float64, 2d, A))
我的一个变量。我看过这个线程Basic Trouble with Python lists in Numba;这是怎么回事?试图找出签名,但我一直遇到错误。
在尝试让 AOT 编译工作之前,我只是想让 @njit 使用签名。
我试过了:
@njit(float64[:,:,:](int32, list(float64), float64[:,:,:]), reflected=True)
如何修复我的签名以使其正常工作?谢谢
解决方案
您需要list
正确指定您的签名。这意味着解决代码中的一些问题:
reflected=True
必须是您调用List
类型类的参数- 我不知道您如何以及在何处导入
list
. 如果没有导入,则不是 numba 类型。如果您确实将某些内容导入为list
,则您覆盖了 python 内置模块list
。你永远不应该这样做。所以我会写而不是 list ,nb.types.List(...)
假设你用 .import 导入 numbaimport numba as nb
如果您使用from numba import *
: 导入 numba,这是您应该不惜一切代价避免的另一件事。 float64
需要更精确地指定存储在列表中的类型。array(float64, 2d, A)
您的反射列表中有一个类型数组。这意味着您的列表签名需要完全包含此数组类型。在这种情况下,这看起来像:nb.float64[:, :]
。对于 C- 或 F- 等其他内存布局,请查看这篇文章。
因此,您生成的签名将如下所示:
@nb.njit(nb.float64[:, :, :](nb.int32, nb.types.List(nb.float64[:, :], reflected=True), nb.float64[:, :, :]))
再次假设您导入 numbaimport numba as nb
并且您的数组是array(float64, 2d, A)
.
推荐阅读
- android - 如何使用@HiltAndroidApp注解但项目中没有Application类?
- php - 文件验证在 laravel 中无法正常工作
- php - array_search 忽略第一个值并跳到第二个值
- akka-stream - 用源完成路由并获得其物化价值
- python-3.x - 在 Python 数据框中使用 Replace() 用于多列但值相同
- sql-server - 基于汇总类型的树结构中的总分数
- python - 异常值:字段 'id' 需要一个数字,但得到了 ''
- android - 使用 LWIP 发送原始 IP 数据包
- spring-boot - ARM64 的 Spring Boot mvn 插件
- javascript - parentElemenst 和 parentNode 无法从列表中删除项目