Python:AttributeError:'bool'对象没有属性'all'

时间:2019-12-15 15:55:43

标签: python list

我正在适应与我一起学习的一个人的代码,以解决我的问题。

这是他的代码:

     if not((paux1 == paux2).all()):
        pop[int(saidaFO[pos,0]),:] = paux2
        pos -= 1

它有效,当我打印时,我得到paux1的结果:[-2.3668 1.3174]。 我正在处理另一个问题,以我为例,当我打印paux1时,我遇到了这个问题:[0.2107491848569726,443,3]

所以,当我尝试进行相同的比较时:

if not((paux1 == paux2).all()):

我收到此错误:“ AttributeError:'bool'对象没有属性'all'” 我不明白发生了什么事...有人可以帮我吗? 我不太了解.all()的工作原理...也许等效的代码可以工作...

2 个答案:

答案 0 :(得分:1)

另一个错误来源是两个np.array的形状不同。例如:

(np.array([[1,1]])==np.array([1,2,3])).all()

返回:

    ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-400-ea9825114062> in <module>
----> 1 (np.array([[1,1]])==np.array([1,2,3])).all()

AttributeError: 'bool' object has no attribute 'all'

答案 1 :(得分:0)

在您的人的代码中,paux1paux2可能是numpy数组,因此paux1 == paux2返回一个表示布尔值的数组(测试的相等性是对还是错),而该数组可以有一个.all()方法。

听起来您正在使用列表,所以paux1 == paux2不会像numpy数组那样按元素比较元素。您只检查两个列表是否相等,并返回一个布尔值。该布尔值没有.all()方法,这就是导致您出错的原因。

将您的值列表预先转换为numpy数组,错误应得到解决。

paux1 = np.array(paux1)
paux2 = np.array(paux2)