请参阅以下最低代码,
import numba
list_of_list = [[1, 2], [34, 100]]
@numba.njit()
def test(list_of_list):
if 1 in list_of_list[0]:
return 'haha'
test(list_of_list)
这不起作用,并且似乎 list_of_list[0] 在编译期间不再像列表一样。但是,以下代码有效:
list_of_list = [[1, 2], [34, 100]][0] # this is a list NOW!
@numba.njit()
def test(list_of_list):
if 1 in list_of_list:
return 'haha'
test(list_of_list)
这一次,我传入的实际上是列表,而不是列表。然后它工作。它似乎for i in list
在 numba 中有效,而不是for i in list_of_list
.
在我的用例中,将列表或数组列表(如 2d 数据)传递给 numba 函数很常见。有时我只需要列表中的一个元素,这是在程序中动态确定的。
为了让它工作,我实际上想出了一个解决方案:将list_of_list
flattened 变成 along list
,然后使用线性索引提取 original 中的一个元素list_of_list
。
我在这里问,还有其他替代解决方案吗?