2017-02-17 81 views
2

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

感谢您的帮助!

回答

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 
+0

我试过,但现在它给了我这个错误:类型错误:只有整数标阵列可以被转换成一个标量指数。我认为这意味着由于数组是bool类型的值,它需要是int类型的数组?如何将布尔数组转换为int数组? – pds360

+0

@ pds360你能给出更多关于这个'np_bin_array'如何产生的信息吗?我不能用简单的bool numpy数组重现这个问题,我猜你的意思是别的? – Chazeon

+0

其实我只是用np.packbits方法,然后把每个char代码转换回字符串,如果它是0就停止。yy = [] yy_word =“” yy = np.packbits(np_bin_array ) for i 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) 
相关问题