Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将numpy二进制字符串数组转换回字符串_Python_String_Numpy - Fatal编程技术网

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

Python 将numpy二进制字符串数组转换回字符串,python,string,numpy,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填充 我需要将其转换回字符串,再次形成单词,去掉0,上面的输出应该是“Hello” 谢谢你的帮助 您可以首先使用将位解释

我有一个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”


谢谢你的帮助

您可以首先使用将位解释为数组,然后通过应用将其转换为字节数组,然后将其转换为普通字符串

下面的代码

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"))
给予


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

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

我用这个来工作:

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)

我试过了,但现在它给了我这个错误:TypeError:只有整数标量数组可以转换为标量索引。我认为这意味着,由于数组是bool类型的值,所以它需要是int类型的数组?如何将布尔数组转换为整数数组?@pds360您能否提供有关如何生成此
np\u bin\u数组的详细信息?我不能用一个简单的bool numpy数组来重现这个问题,我猜你是在说别的什么?事实上,我绕过了它,只使用了np.packbits方法,然后将每个字符代码转换回字符串,如果它是0就停止。yy=[]yy_word=”“yy=np.yy中i的包装位(np_bin_数组):如果i:j=chr(i)yy_word+=str(j)print(yy_word)
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))
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)