1 回答
TA贡献1827条经验 获得超9个赞
在Python(不是)中,该函数的工作原理是:numba
In [412]: def foo():
...: a = np.ones(1, np.bool_)
...: if a > 0:
...: print('truebr')
...: else:
...: print('falsebr')
...:
In [413]: foo()
truebr
但如果 是具有更多值的数组:a
In [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
如果我更改函数来测试 的每个元素,它的工作原理:a
In [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
一个(或)包装器也可以工作:allany
In [423]: @numba.njit
...: def foo():
...: a = np.array([True])
...: if (a > 0).all():
...: print('truebr')
...: else:
...: print('falsebr')
...:
In [424]: foo()
truebr
添加回答
举报