np.any()多个逻辑语句

时间:2019-05-06 10:00:38

标签: python numpy

我有一个具有多个值的numpy数组(例如:v = np.array([0.81597636, 0.93198024])。 我想检查v中的任何值是否在xminxmax之间。我尝试了以下方法:

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()中使用了多个逻辑语句,但是我不知道如何解决这个问题。

2 个答案:

答案 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]