2016-03-21 24 views
0

整数を持つ配列をPython 2.7を使用してバイナリに変換しようとしています。整数配列をPythonでバイナリ配列に変換する

#!/usr/bin/python 
import numpy as np 

a=np.array([6,1,5,0,2]) 
b=np.array(np.zeros((5))) 

for i in range(10): 
    b[i]=bin(int(a[i])).zfill(8) 

をコードは私にエラーメッセージが表示されます::。

B [i]を=ビン(INT([i])と)zfill

私のコードの簡略版は以下のとおりです。 (8) ValueError:float()の無効なリテラル:0000b110

私のコードに問題がありますか? これを行う別の方法はありますか? 元のコードは、2次元配列を持つはるかに大きなプロジェクトの一部です。 Pythonの

に私は相対的な初心者だ

p.s

+0

[Pythonでバイナリをバイナリに変換]の複製があります。(http://stackoverflow.com/questions/10411085/converting-integer-to-binary-in-python) – Reti43

+0

ValueErrorは、偶発的な大恐慌。 bin(6)は '' 0b110''で、0でパディングする前に '0b'部分を取り除く必要がありました。エラーメッセージは、文字通り、 '0000b110'に何か問題があることを指摘しています。また、なぜあなたの配列はサイズ5ですが、あなたは 'for i in range(10):'をしますか? – Reti43

+0

すみません、ありがとうございました! –

答えて

0

numpyのは、あなたの番号を解釈することはできませんbが含まれていることを除いて、floatにあなたの2進数を変換しようとします。この文字はbin関数で追加されました。 bin(2)0b10です。あなたは最初の2つの文字を削除するには、「スライス」を使用することで、このようなあなたのzfill前にこのb文字を削除する必要があります。

b[i]=bin(int(a[i]))[2:].zfill(8) 
1

binが、それはバイナリ表現であることを示す0bで始まる文字列を作成します。バイナリ表現だけが必要な場合は、zfillを呼び出す前に最初の2文字をスライスする必要があります。

の代わりにこれをやって、あなたはそれが8

がさらにためFormat Specification Mini-Languageを参照してください長さになるまで基本的に、これは0が埋め込まa[i]のバイナリ表現を出力しますので、

b[i] = '{:08b}'.format(a[i]) 

ようformatを使用することができます詳細。

関連する問題