在这个程序中,我遇到了错误:
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()