警告?,python,numba"/>

首页 > 解决方案 > Numba:如何避免警告?

问题描述

在一个numba函数中,我传递了这样的参数:

sets_one_step(idx,sets=[set1, set2], indexes=[sort_idx1, sort_idx2], probs=[P1, P2])

运行代码后,我收到以下警告:

/.local/lib/python3.6/site-packages/numba/core/ir_utils.py:2031: NumbaPendingDeprecationWarning: 
Encountered the use of a type that is scheduled for deprecation: type 'reflected list' found for argument 'sets' of function '__numba_parfor_gufunc_0x7f5ebfb88748'.

此特定错误/警告可能源自函数内的以下行:

for k in prange(len(sets)):

在这里,set1, set2是 numpy 数组(integerflaot32)。如果这只是 2 组,那么我可以在函数中将它们设为单独的参数。但是,我的应用程序可以有超过 2 个这样的数组。我想知道如何在我的用例中避​​免这个警告。

标签: pythonnumba

解决方案


考虑以下代码:

import numba as nb

@nb.njit
def process_some_list(lst):
    return lst[0]

传递标准 Python 列表会产生以下输出:

>>> process_some_list([1,2,3])
.../numba/core/ir_utils.py:2119: NumbaPendingDeprecationWarning: 
Encountered the use of a type that is scheduled for deprecation:
type 'reflected list' found for argument 'lst' of function 'process_some_list'.
For more information visit https://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-reflection-for-list-and-set-types
[... more lines deleted ...]
1

结果是正确的,但 Numba 表示reflected list已计划弃用。根据文档,您可以使用typed.List,如本例所示:

>>> process_some_list(nb.typed.List([1,2,3]))
1

但是,如果您需要集合列表:

>>> lst = [{1, 2}, {3, 4}]
>>> process_some_list(nb.typed.List(lst))

对于 Set,您会收到相同的弃用消息:

.../numba/typed/typedlist.py:83: NumbaPendingDeprecationWarning: 
Encountered the use of a type that is scheduled for deprecation: type 'reflected set' found for argument 'item' of function 'impl_append.<locals>.impl'.
For more information visit https://numba.pydata.org/numba-doc/latest/reference/deprecation.html#deprecation-of-reflection-for-list-and-set-types
[... more lines deleted ...]
{1, 2}

结果再次正确,但文档说typed.Set尚未实施,因此您可能需要忍受警告。它们仅在编译函数时出现,无论是在第一次执行期间,还是在对参数和返回类型使用签名时声明时。


推荐阅读