【问题标题】:np.any() multiple logic statements [duplicate]np.any() 多个逻辑语句[重复]
【发布时间】:2019-05-06 10:00:37
【问题描述】:

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

【问题讨论】:

    标签: python numpy


    【解决方案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 数组,当然,结果是模棱两可的。您需要将一个布尔数组与另一个进行比较,这就是为什么您必须将条件链接起来,如上所示。

    【讨论】:

      【解决方案2】:

      这是使用列表理解的另一种方法

      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]
      

      【讨论】:

      • 当你有一个 Numpy 数组时使用列表推导是否明智?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多