我有一个具有多个值的numpy数组(例如:v = np.array([0.81597636, 0.93198024])
。
我想检查v
中的任何值是否在xmin
和xmax
之间。我尝试了以下方法:
if np.any(xmin <= v <= xmax):
print("Is in range")
但是我得到了错误:
ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()
这样做的时候我没有收到错误消息:
if np.any(xmin <= v) and np.any(v <= xmax):
print("Is in range")
但是这行不通,因为v
中可能有一个元素,该元素大于xmin
,也可能有一个元素,其小于xmax
但它的元素不一定是同一元素。
我认为问题是,我在np.any()
中使用了多个逻辑语句,但是我不知道如何解决这个问题。
答案 0 :(得分:1)
您需要分别检查两个条件,并将它们与bitwise AND
组合:
v = np.array([0.81597636, 0.93198024])
(v > 0.85) & (v < 1.)
# array([False, True])
请注意,通过第一次比较,您得到:
0.85 < v
# array([False, True])
因此请注意,执行以下操作将引发错误:
0.85 < v < 1.
ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()
其背后的原因是,您正在将1x2
数组与int
进行比较,这将导致另一个1x2
数组,当然,结果是不明确的。您需要将布尔数组与另一个布尔数组进行比较,这就是为什么必须如上所述链接条件的原因。
答案 1 :(得分:1)
这是使用列表理解的另一种方法
v = np.array([0.81597636, 0.93198024])
xmin, xmax = 0.8, 0.9
check_list = [True if xmin <= i <= xmax else False for i in v]
结果:
[True, False]