在numpy数组中组合AND逻辑语句

发布于 2021-01-29 17:27:22

当两个条件True在矩阵中时,选择元素的方式是什么?在R中,基本上可以组合布尔向量。

所以我的目标是:

A = np.array([2,2,2,2,2])
A < 3 and A > 1  # A < 3 & A > 1 does not work either

相当于:ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

它应评估为:

array([True,True,True,True,True])

我的解决方法通常是将这些布尔向量求和并等于2,但是必须有更好的方法。它是什么?

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用&,例如:

    x = np.arange(10)
    (x<8) & (x>2)
    

    array([False, False, False,  True,  True,  True,  True,  True, False, False], dtype=bool)
    

    一些细节:

    • 之所以有效,&是因为它是numpy ufunc的简写bitwise_and,其bool类型与相同logical_and。也就是说,这也可以解释为
      bitwise_and(less(x,8), greater(x,2))

    • 您需要使用括号,因为numpy&中的优先级高于<>

    • and不起作用,因为它对于numpy数组是模棱两可的,因此numpy引发了异常,而不是猜测。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看