错误:包含多个元素的数组的真值是不明确的



在这个程序中,我遇到了错误:

ValueError:包含多个元素的数组的真值是不明确的。使用a.a any()或a.a all()

如果每次迭代的alpha值只有一个数字,为什么会出现这个错误?

while rho>1e-3:
print(alpha)
if alpha>-90 and alpha<=90:
rho_dot,alpha_dot,beta_dot = [-k_rho*rho*math.cos(alpha),
k_rho*math.sin(alpha)-k_alpha*alpha-k_beta*beta,-k_rho*math.sin(alpha)]

if np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180)):
rho_dot,alpha_dot,beta_dot = [k_rho*rho*math.cos(alpha),-k_rho*math.sin(alpha)+k_alpha*alpha+k_beta*beta,k_rho*math.sin(alpha)]

虽然alpha总是一个数字,但np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180))是一个可以有多个元素的列表。你应该把这一行改成:

if any(i for i in np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180))):

或:

if all(i for i in np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180))):

取决于您是希望np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180))中的任何元素为真还是满足条件的所有元素。

另外,我认为你需要加一个:

else:
break

子句,否则将陷入无限循环。

您可以通过更改违规行(包含union1d的行)来修复此错误:

if np.union1d((alpha>-180 and alpha<=-90),(alpha>90 and alpha<=180)).any():

在内部,any()方法将遍历来自union1d的数组结果的元素(即使只有一个元素),以测试alpha是否在-180和-90之间或在90和180之间(或者,在一般情况下,两者都在-180和-90之间,尽管在您的特殊情况下,这在算术上是可能的)。

对于numpy开发人员决定您的原始使用应该产生错误的动机,请参阅以下答案:ValueError:包含多个元素的数组的真值是模糊的。使用a.a any()或a.a all()

相关内容

  • 没有找到相关文章

最新更新