python - 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 数组(integer
或flaot32
)。如果这只是 2 组,那么我可以在函数中将它们设为单独的参数。但是,我的应用程序可以有超过 2 个这样的数组。我想知道如何在我的用例中避免这个警告。
解决方案
考虑以下代码:
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
尚未实施,因此您可能需要忍受警告。它们仅在编译函数时出现,无论是在第一次执行期间,还是在对参数和返回类型使用签名时声明时。
推荐阅读
- c - 这个数组是在增加还是它做了什么?
- c# - 如何在 MVVM WPF C# 中的 ComboBox 中显示 ObservaBleCollection 的值
- reactjs - 如何使此按钮起作用
- python - 是否有一种算法可以找到总和小于给定 K 的子列表数量?优于 O(N^2)
- java - Java:在链表中增量添加元素
- reactjs - react-admin 的 MuiGridList 布局的批量操作功能
- sql - 如何将文件名作为参数传递给 Azure 逻辑应用中的存储过程
- simulation - 如何在 Netlogo 上重复相同的设置?
- python - 在python中计算矩阵中值距离的有效方法
- c++ - 尝试在 C++11 线程中使用已删除的函数