任何或全部的python valuetype错误

任何或全部的python valuetype错误,python,Python,我是python新手,遇到以下错误: while (E_old != E_new) and self.num_iter < 42: while(E_old!=E_new)和self.num_iter

我是python新手,遇到以下错误:

   while (E_old != E_new) and self.num_iter < 42:
while(E_old!=E_new)和self.num_iter<42:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

我尝试使用:

while (E_old != E_new) and (self.num_iter < 42).all: but it still gave an issue
while(E_old!=E_new)和(self.num_iter<42)。所有人:但它仍然给出了一个问题

有人能帮我吗?

您看到的
ValueError
来自NumPy:每当您尝试在布尔上下文中计算数组时(即,将该数组解释为true或false),就会发生此错误。 这里有一些有点相关的问题和答案。参见答案示例

在这种情况下,问题似乎是
E_old
E_new
(或两者都可能)是一个NumPy数组。表达式
E_old!=E_new
是一个布尔数组,NumPy拒绝猜测如何在布尔上下文中解释它。如果更换
E_old!=E_new
在表达式中使用
(E_old!=E_new)。任何()
,您都会看到问题消失。表达式
(E_old!=E_new)。如果
E_old
的任何组件与
E_new
的相应组件不同,则any()
将为真。如果
E_old
E_new
完全匹配,则表达式将为false


注意:您可能还需要查看该方法。

您看到的
ValueError
来自NumPy:每当您尝试在布尔上下文中计算数组时(即,将该数组解释为true或false),就会发生该错误。 这里有一些有点相关的问题和答案。参见答案示例

在这种情况下,问题似乎是
E_old
E_new
(或两者都可能)是一个NumPy数组。表达式
E_old!=E_new
是一个布尔数组,NumPy拒绝猜测如何在布尔上下文中解释它。如果更换
E_old!=E_new
在表达式中使用
(E_old!=E_new)。任何()
,您都会看到问题消失。表达式
(E_old!=E_new)。如果
E_old
的任何组件与
E_new
的相应组件不同,则any()
将为真。如果
E_old
E_new
完全匹配,则表达式将为false


注意:您可能还想看看这个方法。

E_old和
E_new
是什么样子的?试着用
(E_old!=E_new)
替换
(E_old!=E_new)。any()
E_old=-1和E_new=10000000000000000000000000000000000000000000hmm。什么是
类型(旧版)
类型(新版)
?不,我不相信如果行
while(E_old!=E_new)和self.num_iter<42:
生成该错误消息,则执行该行时,
E_old
E_new
self.num_iter
中至少有一个是一个numpy数组。请尝试替换
(E_old!=E_new)
带有
(E_old!=E_new)。any()
E_old=-1和E_new=1000000000000000000000000000000000hmm。什么是
类型(旧版)
类型(新版)
?不,我不相信如果行
while(E_old!=E_new)和self.num_iter<42:
生成该错误消息,那么在执行该行时,
E_old
E_new
self.num_iter
中至少有一个是numpy数组。是的,我尝试了此操作并得到以下错误:while(E_old!=E_new)。any()和self.num_iter<42:AttributeError:“bool”对象没有属性“any”好的。从你的问题来看,我猜有某种迭代和收敛测试正在进行。是否有可能
E_old
E_new
开始时是常规标量,但在以后的迭代中会变成数组?因此,如果
E_old
E_new
都是标量,那么您的原始代码就应该可以了。如果其中一个是数组,则需要
.all()
。如果他们正在更改类型,那么如果可能的话,您可能需要考虑重新编写代码;如果不可能,条件将需要更复杂,以适应标量和数组情况。是的,我尝试了此操作并得到以下错误:while(E_old!=E_new)。any()和self.num_iter<42:AttributeError:'bool'对象没有属性'any'好的。从你的问题来看,我猜有某种迭代和收敛测试正在进行。是否有可能
E_old
E_new
开始时是常规标量,但在以后的迭代中会变成数组?因此,如果
E_old
E_new
都是标量,那么您的原始代码就应该可以了。如果其中一个是数组,则需要
.all()
。如果他们正在更改类型,那么如果可能的话,您可能需要考虑重新编写代码;如果不可能,条件将需要更加复杂,以适应标量和数组情况。