python - 如何在没有 numpy 的情况下在 jit 装饰器上设置二维数组?
问题描述
我在 Python3 中使用 Numba 库。
函数的参数是一个二维数组。
我将 Numba jit 装饰器设置为list[list[int]]
,但TypeError: 'type' object is not subscriptable
在运行代码后显示。
我print(numba.typeof(matrix))
用来检测参数类型,它返回list(reflected list(int32))
类型。
但即使我将装饰器更改为list[list[numba.int32]]
,也无法正常工作。
代码:
from numba import jit
size = 3
matrix = [[0, 1, 2], [4, 5, 6], [7, 8, 9]]
@jit(list[list[int]])
def test(jitmatrix):
_total = 0
for i in range(size):
for j in range(size):
_total += jitmatrix[j][i]
test(matrix)
知道在没有 numpy 库的情况下在 jit 装饰器上设置二维数组吗?
还是必须使用 numpy 库?
解决方案
从 0.44 开始的 Numba 不支持将列表列表作为 nopython 模式下函数的输入。看:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html#list-reflection
在 to 的参数中@jit
,numba 不知道list
也无法将其自动转换为任何 numba 类型。错误来自TypeError ... subscriptable
python 本身,因为您试图访问内置类型的元素(list
在这种情况下),这是不允许的。
以下将起作用:
from numba import jit
import numba as nb
import numpy as np
size = 3
matrix = np.array([[0, 1, 2], [4, 5, 6], [7, 8, 9]])
@jit(nopython=True)
# or @jit(nb.int64(nb.int64[:,:]))
def test(jitmatrix):
_total = 0
for i in range(size):
for j in range(size):
_total += jitmatrix[j,i] # note the change in indexing, which is faster
return _total
test(matrix)
推荐阅读
- java - 应用未安装!从 android studio build 安装 apk 时出错
- linux - 带有 docker 的变量
- javascript - 为什么在每个找到的值之后都会出现计数器?
- c# - 登录到我的其他应用程序时,Request.IsAuthenticated 返回 true
- apache-spark - pyspark:使用时间序列数据填充零的滚动平均值
- jquery - 如何一起选择所有兄弟姐妹的孩子
- c# - 这个通用导航命令可以改进吗?
- html - 无法显示与 span html 标记绑定的图标
- sql - 如何在Sql中将多个表输出转换为子json
- react-native - 在 React Native 中使用滚动视图作为有限列表是否合理?