Eftekhari
Eftekhari

Reputation: 1021

Numpy unpackbits type error when trying to convert bytes to bits

To get bits from bytes:

bytes = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
bits = numpy.unpackbits(bytes)  

throws this error:
TypeError: Expected an input array of unsigned byte data type
but if I get bytes in this way it works:

bytes = numpy.fromfile(filename, dtype="uint8")

How to solve this error, thanks.

Upvotes: 2

Views: 289

Answers (2)

fsl
fsl

Reputation: 3280

You have to pass an array with a dtype of unsigned integer:

hex_codes = 0x13, 0x00, 0x00, 0x00, 0x08, 0x00
arr = np.array(hex_codes).astype(np.uint8)
np.unpackbits(arr)

Output:

array([0, 0, 0, 1, 1, 0, 0, 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, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0], dtype=uint8)

Btw, you probably know this, but you should not reassign a builtin as you did with bytes.

Upvotes: 1

Okapi575
Okapi575

Reputation: 718

bytes should be unsigned array, why not use a numpy unsigned?

bytearray = numpy.array([0x13, 0x00, 0x00, 0x00, 0x08, 0x00],dtype=numpy.uint8)
bits = numpy.unpackbits(bytearray)  

Upvotes: 1

Related Questions