【问题标题】:Converting predefined 2d Array into 2d bool array将预定义的二维数组转换为二维布尔数组
【发布时间】:2021-02-04 14:58:59
【问题描述】:

我得到了一个预定义的数组

a = [[2 3 4]
     [5 6 7]
     [8 9 10]]

我的问题是将此数组转换为所有偶数都为真的布尔数组。任何帮助表示赞赏!

【问题讨论】:

    标签: python arrays numpy boolean


    【解决方案1】:

    我会使用 numpy,它非常简单:

    import numpy as np
    
    a = [[2, 3, 4],
         [5, 6, 7],
         [8, 9, 10]]
    a = np.asarray(a)
    (a % 2) == 0
    

    【讨论】:

      【解决方案2】:

      使用 Numpy 执行以下操作:

      import numpy as np
      a = [[2, 3, 4],
           [5, 6, 7],
           [8, 9, 10]]
      aBool=(np.asarray(a)%2==0)
      

      变量 aBool 将包含 True,其中有一个偶数值,而 False 一个奇数值。

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

      【讨论】:

        【解决方案3】:

        这是根据here找到的答案改编的:

        a=np.array([1,2,3,4,5,6])
        
        answer = (a[a%2==0])
        print(answer)
        
        

        这基本上是Andrew 所说的,但没有使用 NumPy

        如果您有兴趣获取布尔值并测试 NumPy 数组中的某些条件,您可以找到一篇简洁的帖子 here

        【讨论】:

          【解决方案4】:

          这可以简单地使用一行来完成(如果你不想使用 numpy):

          [[i % 2 == 0 for i in sublist] for sublist in a]
          
          >>> [[True, False, True], [False, True, False], [True, False, True]]
          

          这里,i % 2 表示取模运算符,它给出第一个数除以第二个数的余数。在这种情况下,偶数i % 2 = 0,奇数i % 2 = 1。两个 = 符号表示表达式被评估为布尔值。

          两个for 循环遍历二维列表中的每个列表。

          如果您发现这种格式更易于理解,则可以对其进行扩展,但它本质上是做同样的事情:

          >>> newlist = []
          >>> for sublist in a:
                  partial_list = []
                  for i in sublist:
                          partial_list.append(i % 2 == 0)
                  newlist.append(partial_list)
          
          
          >>> newlist
          [[True, False, True], [False, True, False], [True, False, True]]
          

          【讨论】:

            【解决方案5】:

            为什么不提否定:

            a = [[2, 3, 4],
                 [5, 6, 7],
                 [8, 9, 10]]
            
            >>> ~np.array(a)%2
            array([[1, 0, 1],
                   [0, 1, 0],
                   [1, 0, 1]], dtype=int32)
            

            这是一个布尔形式:

            >>> ~(np.array(a)%2).astype(bool)
            array([[ True, False,  True],
                   [False,  True, False],
                   [ True, False,  True]])
            

            【讨论】:

              猜你喜欢
              • 2019-01-23
              • 2016-12-08
              • 2021-01-31
              • 2016-02-18
              • 2018-02-19
              相关资源
              最近更新 更多