2017-02-17 13 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] 

それが0のパディングそれをして、左から順に、もともとの単語の8ビット列の文字でした。

これを再び文字列に変換して単語を形成し、0を取り除き、上記の出力を 'Hello'にする必要があります。

ありがとうございました!

答えて

1

最初にnumpy.packbits()を使用してビットを配列に解釈し、次にbytearray()を適用してそれを通常の文字列にすることで、バイトの配列に変換できます。

次のコード

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

は、この1つは私に働く

Hello 
+0

私はそれを試みたが、今では私は、このエラーを与える:TypeError例外:唯一の整数スカラー配列は、スカラーインデックスに変換することができます。私はこれは、配列はbool型の値であるため、int型配列である必要があると思いますか?ブール配列をint配列に変換するには? – pds360

+0

@ pds360この 'np_bin_array'の生成方法に関する詳しい情報がありますか?私は単純なbool numpy配列で問題を再現することはできません、私はあなたが他の何かを意味していると思いますか? – Chazeon

+0

実際には、np.packbitsメソッドを使用して文字列に変換し、文字列に変換して停止すると0になります。yy = [] yy_word = "" yy = np.packbits(np_bin_array (yy_word) for i: if: 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) 
関連する問題