我有一个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)
答案 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次(每次浮动一次)