If语句比较numpy数组时引发ValueError



我有两个数组。两者都是1D。但是,我得到以下值错误。以下是我尝试过的。

R=np.arange(30,50,1)
T=np.arange(70,90,1)
H=[]
if (T > 8) and (R>10): 
H.append(0.5 * (T + 61. + (T - 68.) * 1.2 + R * 0.094))
else:
H.append(0 * 2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

就这么简单。

import numpy as np
R=np.arange(30,50,1)
T=np.arange(70,90,1)
H=[]
if (T > 8).all() and (R>10).all():
H.append(0.5 * (T + 61. + (T - 68.) * 1.2 + R * 0.094))
else:
H.append(0 * 2)
print(H)

这是一个解释。

如果你真的只是想知道是否至少有一个元素符合条件,那么你应该使用any()

Python很难将列表T中的值与数字进行比较
T > 8上引发错误。

对于列表

  1. 使用all()检查列表中的所有项目是否都高于值:
all(x > value for x in list)
  1. 使用any()检查列表中是否有任何项目高于值:
any(x > value for x in list)

对于NumPy阵列

  1. 当具有NumPy阵列时,可以将其缩短为:
T = np.array([1,2,3])
all(T > 8)

修复

固定到all:

H=[]
import numpy as np
T = np.array([30,34,56])
R = np.array([29,500,43])
if all(T > 8) and all(R > 10):
H.append(0.5 * (T + 61. + (T - 68.) * 1.2 + R * 0.094))
else:
H.append(0 * 2)

与上面的答案状态一样,您可以使用all或any。使用任何修复都是:

if any(t > value for t in T) and any(h > value for h in H):
H.append(0.5 * (T + 61. + (T - 68.) * 1.2 + R * 0.094))
else:
H.append(0 * 2)

python解释器每次需要一个值,以便进行比较。

最新更新