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

3

我有一个类似这样的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”。

谢谢你的帮助!

4个回答

2
你可以首先使用 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: only integer scalar arrays can be converted to a scalar index。我认为这意味着由于数组是布尔类型值,所以它需要是整数类型数组?如何将布尔数组转换为整数数组? - pds360
@pds360,你能提供更多关于np_bin_array是如何生成的信息吗?我用一个简单的布尔型numpy数组无法重现这个问题,我猜你指的是其他什么东西? - Chazeon
实际上,我通过仅使用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) - pds360

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

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

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接