将numpy二进制字符串数组转换回字符串

时间:2017-02-17 12:13:29

标签: python string numpy

我有一个像这样的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' s填充它。

我需要将其转换回字符串以再次形成单词并删除0并且上面的输出应该是' Hello'。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

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

以下代码

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

答案 1 :(得分:0)

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

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])

答案 2 :(得分:0)

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))

答案 3 :(得分:0)

我得到了它的工作:

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)