将boolean numpy数组的行编码为字节

时间:2013-10-22 12:18:56

标签: python numpy

我有一个nx8维度的numpy数组,dtyp = boolean 我希望将它转换为一个numpy 1-d数组,其中每一行都被转换成一个字节,通过bin2dec

x = array([[ True,  True, False, False,  True,  True, False, False],
       [ False,  False, False, False,  True,  True, False, False],
       [ True,  False, False, False,  False,  False, False, False]], dtype=bool)

我希望输出为:

y = array([204 ,12, 128], dtype=uint8)

2 个答案:

答案 0 :(得分:5)

>>> np.packbits(np.uint8(x))
array([204,  12, 128], dtype=uint8)

怎么样?

答案 1 :(得分:1)

我想这会做:

import numpy
x = numpy.array([[ True,  True, False, False,  True,  True, False, False],
       [ False,  False, False, False,  True,  True, False, False],
       [ True,  False, False, False,  False,  False, False, False]], dtype=bool)
x2 = 1*x # makes True become 1 and False become 0
x3 = numpy.zeros((3), dtype = numpy.uint8) # change 3 to 20000 or whatever the length of your array is
for j in range(x2.shape[1]):
    x3 += x2[:,j]*(2**(7-j))
print x3
[204  12 128]

告诉我你的长阵列需要多长时间,如果它太慢,我会尝试将for-loop推向numpy以加速它。 (需要是uint8而不是int8,否则结果是[-52 12 -128])

编辑:实际上应该不那么慢,因为for循环只运行8次(每次浮动一次)