如何使用numba操作列表生成器
How to operate on list generator using numba
我正在尝试使用尝试使用 numba 和列表生成器的简单代码,但在执行以下代码时遇到错误。
@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)
return next(gen)
x = [1,1,1,2,1,3]
perform_search(x, 1)
当我执行上面的代码时,我得到一个ValueError
,然而,当我只使用装饰器@numba.jit
时,我得到一个LoweringError
。
请帮助我使用生成器(或其他方式)执行这个简单的搜索。提前致谢
你有什么
gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)
是生成器表达式,目前numba不支持
如果您改用方括号,例如:
gen = [ind for ind in xrange(len(simple_list)) if simple_list[ind] != number]
那就是list-comprehension,numba可以支持。通过该更改,gen
是 list
,您可以对其进行索引(即 gen[0]
)。
已编辑:
以下代码是gitter用户sklam的建议,我在这里更新。
@numba.jit(nopython=True)
def the_gen(simple_list, number):
for ind in range(len(simple_list)):
if simple_list[ind] != number:
yield ind
@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
for i in the_gen(simple_list, number):
print(i)
如果您按照上述方式进行操作,您将能够使用生成器(因此可以节省内存和时间),因为 numba
当前不支持生成器表达式。
我正在尝试使用尝试使用 numba 和列表生成器的简单代码,但在执行以下代码时遇到错误。
@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)
return next(gen)
x = [1,1,1,2,1,3]
perform_search(x, 1)
当我执行上面的代码时,我得到一个ValueError
,然而,当我只使用装饰器@numba.jit
时,我得到一个LoweringError
。
请帮助我使用生成器(或其他方式)执行这个简单的搜索。提前致谢
你有什么
gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)
是生成器表达式,目前numba不支持
如果您改用方括号,例如:
gen = [ind for ind in xrange(len(simple_list)) if simple_list[ind] != number]
那就是list-comprehension,numba可以支持。通过该更改,gen
是 list
,您可以对其进行索引(即 gen[0]
)。
已编辑:
以下代码是gitter用户sklam的建议,我在这里更新。
@numba.jit(nopython=True)
def the_gen(simple_list, number):
for ind in range(len(simple_list)):
if simple_list[ind] != number:
yield ind
@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
for i in the_gen(simple_list, number):
print(i)
如果您按照上述方式进行操作,您将能够使用生成器(因此可以节省内存和时间),因为 numba
当前不支持生成器表达式。