【问题标题】:Numpy array multiple condition booleanNumpy 数组多条件布尔值
【发布时间】:2018-11-06 01:49:09
【问题描述】:

我希望我的数组通过两个条件。如果我尝试只用一个来做到这一点,我没有任何问题,但如果我给代码两个条件,python 就会崩溃。这是我的代码:

import numpy as np
from collections import deque

queue = deque([], maxlen=10)

queue.appendleft(31)
queue.appendleft(32)
queue.appendleft(33)

cond1 = 35
cond2 = 30

A_1 = np.array(queue)

print(cond2 > A_1 < cond1)
# print(A_1 > 30)  # works
# array([ True,  True,  True], dtype=bool)

print(((cond2 > A_1 < cond1).sum() == A_1.size).astype(np.int))
# print(((A_1 > 30).sum() == A_1.size).astype(np.int))  # works
# 1

【问题讨论】:

  • Numpy 不支持速记运算符。请像这样明确说明它们:(cond2 &gt; A_1) &amp; (A_1 &lt; cond1)
  • 另外,我不明白第二个条件在做什么,但它看起来不正确。
  • 我明白这一点,但我不明白 ((cond2 &gt; A_1 &lt; cond1).sum() == A_1.size).astype(np.int) 想要做什么。
  • 哦,好吧,这很有道理。无论如何,我的第一条评论中的解决方案应该可以工作,以防你还没有看到它。
  • 嗯,是的,你把它改了:(cond1 &gt; A_1) &amp; (A_1 &lt; cond2)... 现在更有意义了吗?

标签: python arrays python-3.x numpy boolean


【解决方案1】:

应该类似于np.logical_and(A_1 &lt; cond1, A_1 &gt; cond2)

如果要检查所有元素是否满足,只需np.all(np.logical_and(A_1 &lt; cond1, A_1 &gt; cond2))

cond2 &gt; A_1 &lt; cond1 无法正常工作,因为cond2 &gt; A_1 返回一个布尔数组。根据您的描述,不需要将布尔值与 cond1 进行比较。明确地说,可以使用np.logical_and

【讨论】:

    【解决方案2】:

    这是一个随机的例子:

    import numpy as np
    
    np.random.seed(123456)
    
    array = np.array(np.random.randn(12))
    
    print((array < 1) & (array > 0))
    

    而 numpy 你必须将条件放在括号中,然后使用 & 运算符作为和条件。对于 or 条件,您使用 |运算符,然后遵循相同的格式。这将为您提供一个布尔值数组。

    【讨论】:

    • 感谢您的回答。它不适用于我的示例。一切都返回 False。
    • @Hsin 这只是伪代码。如果您将条件设置为我指定的特定条件,您的代码中可能会返回零个示例。如果您将条件设置为您想要的条件,您的代码会返回什么?
    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 2016-01-27
    • 2020-10-23
    • 2021-06-17
    • 2020-03-25
    • 2022-01-25
    • 2023-04-05
    • 2011-08-01
    相关资源
    最近更新 更多