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

SSS*_*SSS 7 python list

我正在根据我的问题改编一个和我一起学习的人的代码。

这是他的代码:

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

它有效,当我打印时,我得到了 paux1 的结果:[-2.3668 1.3174]。我正在解决另一个问题,就我而言,当我打印 paux1 时,我有这个: [0.2107491848569726, 443, 3]

所以,当我尝试做同样的比较时:

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

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

Gui*_*ute 8

在你的代码中,paux1paux2可能是 numpy 数组,因此paux1 == paux2返回一个表示布尔值的数组(无论测试的相等性是 true 还是 false),并且该数组确实有一个.all()方法。

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

预先将值列表转换为 numpy 数组,错误应该得到修复。

paux1 = np.array(paux1)
paux2 = np.array(paux2) 
Run Code Online (Sandbox Code Playgroud)


Rex*_*rus 7

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

(np.array([[1,1]])==np.array([1,2,3])).all()
Run Code Online (Sandbox Code Playgroud)

返回:

    ---------------------------------------------------------------------------
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'
Run Code Online (Sandbox Code Playgroud)