【问题标题】:Convert numpy binary string array back to string [duplicate]将numpy二进制字符串数组转换回字符串[重复]
【发布时间】:2017-02-17 12:13:29
【问题描述】:

我有一个像这样的 numpy 二进制数组:

np_bin_array = [0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

原来是一个单词的8位字符串字符,从左边开始,用0填充。

我需要将它转换回字符串以再次形成单词并去除 0,上面的输出应该是“Hello”。

感谢您的帮助!

【问题讨论】:

    标签: python string numpy


    【解决方案1】:

    您可以先使用numpy.packbits() 将位解释为数组,然后使用bytearray() 将其转换为字节数组,然后将decode() 转换为普通字符串。

    以下代码

    import numpy
    np_bin_array = [0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    print(bytearray(numpy.packbits(np_bin_array)).decode().strip("\x00"))
    

    给予

    Hello
    

    【讨论】:

    • 我试过了,但现在它给了我这个错误:TypeError:只有整数标量数组可以转换为标量索引。我认为这意味着由于数组是 bool 类型的值,所以它需要是 int 类型的数组?如何将 bool 数组转换为 int 数组?
    • @pds360 你能提供更多关于这个np_bin_array 是如何产生的信息吗?我无法用简单的 bool numpy 数组重现问题,我猜你的意思是别的?
    • 实际上,我解决了这个问题,只使用 np.packbits 方法,然后将每个字符代码转换回字符串,如果它是 0 则停止。yy=[] yy_word="" yy=np .packbits(np_bin_array) for i in yy: if i: j = chr(i) yy_word += str(j) print(yy_word)
    【解决方案2】:

    这个对我有用。不过我有一个布尔数组,所以必须进行额外的转换。

    def split_list(alist,max_size=1):
        """Yield successive n-sized chunks from l."""
        for i in range(0, len(alist), max_size):
            yield alist[i:i+max_size]
    
    
    result = "".join([chr(i) for i in (int("".join([str(int(j)) for j in letter]), base=2) for letter in split_list(np_bin_array, 8)) if i != 0])
    

    【讨论】:

      【解决方案3】:
      import numpy as np
      np_bin_array = np.array([0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
      bhello = ''.join(map(str, np_bin_array))
      xhello = hex(int(bhello, 2)).strip("0x")
      
      ''.join(chr(int(xhello[i:i+2], 16)) for i in range(0, len(xhello), 2))

      【讨论】:

        【解决方案4】:

        我得到了它的工作:

        np_bin_array = [0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        yy=[]
        
        yy_word=""
        
        yy=np.packbits(np_bin_array)
        
        for i in yy:
            if i:
                j = chr(i)
        
                yy_word += str(j)
        
        print(yy_word)
        

        【讨论】:

          猜你喜欢
          • 2016-08-21
          • 1970-01-01
          • 2012-08-16
          • 2013-05-05
          • 1970-01-01
          • 2021-05-09
          • 1970-01-01
          • 2013-10-29
          • 1970-01-01
          相关资源
          最近更新 更多