【问题标题】:Pictorially visualise numpy boolean array with strings用字符串形象地可视化 numpy 布尔数组
【发布时间】:2020-05-12 15:31:18
【问题描述】:

假设您有一个 2D numpy 布尔数组,array

[[ True  True  True  True  True  True]
 [ True  False False False False True]
 [ True  True  True  True  True  True]]

并且您希望用 ██ 替换 True 值和 False 值的空格以图形方式表示它们:

  ██████████████
  ██          ██
  ██████████████

我在 chararray 上花费了太多时间,但尝试以下方法却无济于事:

chars = np.chararrray(array.shape, unicode=True)
chars[array] = '██'

【问题讨论】:

    标签: python arrays numpy charts ascii


    【解决方案1】:

    您建议的解决方案有效,只需打印得更好:

    chars = np.chararray(array.shape, unicode=True)
    chars[array] = '██'
    print(np.array2string(chars, separator='', formatter={'str_kind': lambda x: x if x else ' '}))
    

    我不确定你是否想去掉括号。

    输出:

    [[██████]
     [█    █]
     [██████]]
    

    如果您想要不带括号(免责声明:这是懒惰的替换,您可能可以更好地删除它们):

    print(np.array2string(chars, separator='', formatter={'str_kind': lambda x: x if x else ' '}).replace(" [","").replace("[","").replace("]",""))
    
    ██████
    █    █
    ██████
    

    【讨论】:

    • 哇,我很惊讶,我的代码得到了某种IndexError
    • 不出所料,也许我只是个白痴,把array.shapearray.size 混为一谈——尽管我会责怪 PIL 与 numpy 不一致。
    • @Krish 发生了。我假设现在一切正常。否则请发布错误,以便我可以提供更好的帮助。如果它也解决了问题,请接受答案。谢谢。
    【解决方案2】:

    Chararray,只是一个经常出现故障的向后兼容性功能。而是遍历数组:

    def __str__(self):
        retval = ''
        for row in self.array:
            retval += ''.join(['  ' if i else '██' for i in row])
            retval += '\n'
        return str(self.array)
    

    【讨论】:

      【解决方案3】:

      如果您不习惯在错误条目中使用空格字符(这会使定位复杂化),我建议您使用以下稍微简化的版本,从之前的答案中汲取灵感:

      def print_bool_array(array, true_char='#', false_char='.'):
          chars = np.empty_like(array, dtype=np.str_)
          chars[array] = true_char
          chars[~array] = false_char
          print(np.array2string(chars, separator='', formatter={'all': lambda x: x}
              ).translate(str.maketrans("", "", " []'")))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2011-10-05
        • 2014-12-20
        • 2019-12-25
        相关资源
        最近更新 更多