【问题标题】:Python, opposite of conditional arrayPython,与条件数组相反
【发布时间】:2016-09-24 22:20:40
【问题描述】:

我有两个numpy 数组,比如说AB

In [3]: import numpy as np

In [4]: A = np.array([0.10,0.20,0.30,0.40,0.50])

In [5]: B = np.array([0.15,0.23,0.33,0.41,0.57])

我应用这样的条件:

In [6]: condition_array = A[(B>0.2)*(B<0.5)]

In [7]: condition_array
Out[7]: array([ 0.2,  0.3,  0.4])

现在我如何得到condition_array的反义词?

即数组A 的值对于哪个数组BNOT GREATER THAN 0.2 and NOT LESS THAN 0.5

In [8]: test_array = A[(B<0.2)*(B>0.5)]

In [9]: test_array
Out[9]: array([], dtype=float64)

上述方法似乎不起作用!

【问题讨论】:

  • NOT GREATER THANLESS THAN OR EQUAL TO 相同,NOT LESS THANGREATER THAN OR EQUAL TO 相同
  • @EliSadoff:是的,我知道这一点,那么解决方案是什么?
  • 它工作正常,但不存在您的代码要求的 &lt; 0.2&gt;0.5 的值。

标签: python arrays numpy conditional


【解决方案1】:

您可以使用~ 运算符来反转数组...

A[~((B>0.2)*(B<0.5))]

请注意,您使用* 似乎是为了执行逻辑“与”。许多人希望您使用二进制“and”运算符 (&amp;) 代替 -- 就个人而言,我更喜欢更明确:

A[~np.logical_and(B > 0.2, B < 0.5)]

或者,以下工作也可以:

A[(B <= 0.2) | (B >= 0.5)]
A[np.logical_or(B <= 0.2, B >= 0.5)]

【讨论】:

  • 哦!这是什么魔法!!我从来不知道反转运算符!文档中似乎只有 not 运算符可用,为什么他们没有提到 ~ ?有什么想法吗?
  • Python 支持一整套“按位”运算符(|&amp;~^&gt;&gt;&lt;&lt;)。对于内置类型,它们仅用于intlong。 (一些运算符也处理set 对象)。对于布尔 numpy 数组,~|&amp; 被重载以执行逻辑等价 - 否则,我认为它们仅适用于整数数组。
  • 您说不使用* 而是使用np.logical_and 的原因是什么?他们不一样吗?
  • @ThePredator -- 它做同样的事情,但是在阅读代码时,如果我看到*,我不认为是合乎逻辑的“和”,所以它迫使我退后一步尝试找出表达式以了解它的作用。
【解决方案2】:

De Morgan's Law

A[np.logical_or(~(B > 0.2), ~(B < 0.5)]

或者

A[np.logical_or(B <= 0.2, B >= 0.5)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2016-10-03
    • 2011-05-18
    • 1970-01-01
    • 2018-07-13
    • 2021-09-17
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多