如何在Numba中使用嵌套列表?解决反射列表弃用报错
解决Numba嵌套列表索引的报错问题
报错原因
你遇到的reflected list警告,是因为直接用List(a)创建嵌套列表时,内部的子列表还是Python原生列表,Numba将其识别为计划废弃的"reflected list"类型,这种类型性能差且不稳定。
修复步骤
1. 正确创建嵌套的Typed List
需要把每个子列表先转换成numba.typed.List,再构建外层的Typed List,确保所有层级都是Numba可识别的类型。
2. 修正函数逻辑错误
你的foo函数中,return False写在了循环内部,导致循环只执行一次就返回,无法遍历所有子列表,需要把它移到循环结束后。
修正后的完整代码
from numba import njit from numba.typed import List @njit def foo(b): for y in range(len(b)): # 用len(b)代替固定值3,适配不同长度的输入 if b[y][0] == 1: return True return False # 移到循环外部,遍历完所有元素再返回 # 正确创建嵌套Typed List a = [[1, 2, 3], [1, 1, 1]] typed_a = List() for sublist in a: typed_sublist = List(sublist) typed_a.append(typed_sublist) print(foo(typed_a)) # 输出True
额外建议
如果你的嵌套列表中每个子列表的长度固定,优先使用numpy数组,Numba对numpy的支持更完善,性能也更优:
import numpy as np from numba import njit @njit def foo(b): for y in range(b.shape[0]): if b[y][0] == 1: return True return False a = np.array([[1, 2, 3], [1, 1, 1]]) print(foo(a)) # 输出True
内容的提问来源于stack exchange,提问作者llamassssssss
相关产品推荐
相关产品推荐

