蟒蛇谓词和条件语句

github上的一位用户报告了使用numba无蟒蛇模式的以下代码的错误:


from numba import njit

import numpy as np


@njit

def foo():

    a = np.ones(1, np.bool_)

    if a > 0:

        print('truebr')

    else:

        print('falsebr')


foo()


他被告知,该表达式不是谓词,而是条件句。为了解决这个问题,他要“将条件包装在真理中以创建谓词”。a > 0


这是否意味着这将修复numba或其他东西中出现的错误。(a > 0) == True


https://github.com/numba/numba/pull/3901/commits/598cdd1707fdeb11b8f1d70aef2d3e36ef37bd34。这是 numba 中这些类型的错误的修复程序吗?


吃鸡游戏
浏览 97回答 1
1回答

素胚勾勒不出你

在Python(不是)中,该函数的工作原理是:numbaIn [412]: def foo():      ...:     a = np.ones(1, np.bool_)      ...:     if a > 0:      ...:         print('truebr')      ...:     else:      ...:         print('falsebr')      ...:                                                                                      In [413]: foo()                                                                                truebr但如果 是具有更多值的数组:aIn [414]: def foo():      ...:     a = np.ones(2, np.bool_)      ...:     if a > 0:      ...:         print('truebr')      ...:     else:      ...:         print('falsebr')      ...:                                                                                      In [415]: foo()                                                                                ...ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()如果我尝试你的函数,我会得到一个很长的回溯;太长而无法显示或分析,但它基本上告诉我它无法在模式下完成。鉴于上述值错误,我并不感到惊讶。 不允许“仅一个”真值数组。njitnjitnjit作为一般规则,使用时应进行迭代。这是它的主要目的 - 运行那些本来太昂贵而无法迭代的问题。不要指望处理Python的所有细微差别。numbanumpy/pythonnumba如果我更改函数来测试 的每个元素,它的工作原理:aIn [421]: @numba.njit      ...: def foo():      ...:     a = np.array([True])      ...:     for i in a:      ...:         if i > 0:      ...:             print('truebr')      ...:         else:      ...:             print('falsebr')      ...:                                                                                      In [422]: foo()                                                                                truebr一个(或)包装器也可以工作:allanyIn [423]: @numba.njit      ...: def foo():      ...:     a = np.array([True])      ...:     if (a > 0).all():      ...:         print('truebr')      ...:     else:      ...:         print('falsebr')      ...:                                                                                      In [424]: foo()                                                                                truebr
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python