【问题标题】:Python - How to NOT, OR and use other logical operators on two binary numpy arraysPython - 如何在两个二进制 numpy 数组上进行 NOT、OR 和使用其他逻辑运算符
【发布时间】:2017-04-28 10:41:16
【问题描述】:

我有两个数组用于表示元素是否存在(1 = 真或存在,0 = 不存在)。两者的大小相同,数组 1 中的元素 1 对应数组 2 中的相同元素。我需要对下面列出的两个 numpy 二进制数组进行一些逻辑计算:

[0,0,0,0,1,1,0]   Array 1
[0,0,0,0,1,0,1]   Array 2

我有并且正在工作,这给了我这个:

[0 0 0 0 1 0 0]   Array after AND operation 

这告诉我每个元素在哪里相同或出现在两个数组中。

我需要输出一个数组,其中数组 1 中有 1,但数组 2 中没有(A1 和!A2)。如:

[0,0,0,0,0,1,0]

另一个数组1中没有1但数组2中有1(!A1&A2),如:

[0,0,0,0,0,0,1]

并且在数组 1 或数组 2 中都没有 1(!A1 和!A2)

[1,1,1,1,0,0,0]

希望这是有道理的,在此先感谢。

【问题讨论】:

    标签: python arrays numpy logic


    【解决方案1】:

    如果你有布尔数组,你可以使用普通的按位运算符~(非)、|(或)、&(和)。当然,它们也适用于普通的整数数组,但例如 ~0 会给出 -1。

    要创建一个布尔数组,请将参数 dtype=bool 提供给 np.array(或另一个返回数组的 Numpy 函数)。使用 ndarray.astype(bool) 获取现有数组的强制转换副本。

    【讨论】:

      【解决方案2】:

      对于逻辑不可以使用:

      not_array = np.logical_not(arr) + [0 for i in xrange(len(arr))]
      

      然后你可以使用你已经弄清楚的 AND 操作。

      PS:np 是 numpy 的

      【讨论】:

      • 所以这会给我一个单一数组(Array1)的NOT,然后你建议我然后和数组2一起?
      • 是的,您也可以使用它来获取数组 2 的 NOT。
      【解决方案3】:
      #What I need is to output an array where there is a 1 in array 1 but not in array 2 (A1 & ! A2)
      a*(a-b)
      Out[626]: array([0, 0, 0, 0, 0, 1, 0])
      
      #Another where There is not a 1 in Array 1 but there is a 1 in Array 2 (! A1 &A2)
      b*(b-a)
      Out[648]: array([0, 0, 0, 0, 0, 0, 1])
      
      #and where there is not a 1 in either Aray 1 or Array 2 (! A1 & ! A2)
      1-(a|b)
      Out[639]: array([1, 1, 1, 1, 0, 0, 0])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多