【问题标题】:pythonic way to convert values in a numpy array to either 0 or 1pythonic将numpy数组中的值转换为0或1的方法
【发布时间】:2021-03-17 18:47:17
【问题描述】:

我有一个 numpy 数组 (10,1)。我想将此数组中的值替换为具有最高值的单元格的 1 或所有其他项目的 0。请问最简单的pythonic方法是什么

test_array= [[0.24330683]
 [0.40597628]
 [0.33086422]
 [0.19425666]
 [0.32084166]
 [0.30551688]
 [0.14800594]
 [0.18241316]
 [0.14760117]
 [0.31546239]]

【问题讨论】:

标签: python numpy


【解决方案1】:

不确定是否大多数pythonic,但你可以这样做:

(test_array == max(test_array)) * 1

【讨论】:

  • 非常pythonic!谢谢
【解决方案2】:

我认为像下面这样的东西会起作用。

test_array_ranking = []
For num in test_array:
    if num == max(test_array):
        test_array_ranking.append(1)
    else:
        test_array_ranking.append(0)
print(test_array_ranking)

我还没有机会测试这个确切的编码,但这是我将采取的路径(很抱歉我的帖子没有明确编码语法)。

【讨论】:

    【解决方案3】:

    我确定这已经得到了回答,但我偏爱 numpy。

    import numpy as np
    
    array = np.random.rand(10, 1)
    np.where(array == array.max(), 1, 0)
    

    数组

    Out[42]: 
    array([[0.01829926],
           [0.83402693],
           [0.13217168],
           [0.94578615],
           [0.42469676],
           [0.19958485],
           [0.90554855],
           [0.77232316],
           [0.97036552],
           [0.07528272]])
    

    阈值后的数组:

    Out[47]: 
    array([[0],
           [0],
           [0],
           [0],
           [0],
           [0],
           [0],
           [0],
           [1],
           [0]])
    

    【讨论】:

      【解决方案4】:

      此解决方案使用掩码将最大值设置为 1,将其他所有值设置为 0。

      import numpy as np
      
      arr = np.array(
          [
              [0.24330683],
              [0.40597628],
              [0.33086422],
              [0.19425666],
              [0.32084166],
              [0.30551688],
              [0.14800594],
              [0.18241316],
              [0.14760117],
              [0.31546239],
          ]
      )
      
      max_mask = (arr == arr.max())
      
      arr[max_mask] = 1
      arr[~max_mask] = 0
      
      print(arr)
      

      输出

      [[0.]
       [1.]
       [0.]
       [0.]
       [0.]
       [0.]
       [0.]
       [0.]
       [0.]
       [0.]]
      

      编辑:这可以变得更简单:

      arr = (arr == arr.max()).astype(int)
      

      【讨论】:

        猜你喜欢
        • 2018-02-23
        • 2014-07-03
        • 2021-05-17
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-11-06
        • 2019-02-09
        相关资源
        最近更新 更多