I am trying to convert an array with integers to binary, using python 2.7.
A simplified version of my code is the following:
#!/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)
The code gives me the error message:
b[i]=bin(int(a[i])).zfill(8)
ValueError: invalid literal for float(): 0000b110
What is wrong with my code? Is there another way to do this? The original code is part of a much greater project with 2 dimensional arrays.
p.s I'm a relative novice to Python
2 Answers 2
Numpy attempts to convert your binary number to a float, except that your number contains a b which can't be interpreted; this character was added by the bin function, eg. bin(2) is 0b10. You should remove this b character before your zfill like this by using a "slice" to remove the first 2 characters:
b[i]=bin(int(a[i]))[2:].zfill(8)
Comments
bin will create a string that starts with 0b indicating that it is a binary representation. If you only want the binary representation you have to slice the first two characters before you call zfill.
Instead of doing this, you could use format like so
b[i] = '{:08b}'.format(a[i])
Basically, this will print the binary representation of a[i] padded with 0 until it has length 8.
See the Format Specification Mini-Language for further details.
'0b110'and you needed to get rid of the0bpart before padding with 0s. The error message literally points out that there is something wrong with0000b110. Also, why are your array of size 5 but you dofor i in range(10):?