我正在适应与我一起学习的一个人的代码,以解决我的问题。
这是他的代码:
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()的工作原理...也许等效的代码可以工作...
答案 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)
在您的人的代码中,paux1
和paux2
可能是numpy数组,因此paux1 == paux2
返回一个表示布尔值的数组(测试的相等性是对还是错),而该数组可以有一个.all()
方法。
听起来您正在使用列表,所以paux1 == paux2
不会像numpy数组那样按元素比较元素。您只检查两个列表是否相等,并返回一个单布尔值。该布尔值没有.all()
方法,这就是导致您出错的原因。
将您的值列表预先转换为numpy数组,错误应得到解决。
paux1 = np.array(paux1)
paux2 = np.array(paux2)