Python 将布尔numpy数组的行编码为字节
我有一个Nx8维的numpy数组,dtyp=boolean 我想把它转换成一个numpy 1-d数组,其中每一行都被bin2dec转换成一个字节Python 将布尔numpy数组的行编码为字节,python,numpy,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, Fal
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)
我想这样可以:
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循环向下推到numpy以加快速度。(需要为uint8而不是int8,否则结果为[-52 12-128])
编辑:实际上不应该那么慢,因为for循环只运行8次(每个浮点值一次)
这是怎么回事?我想把每一行都编码成一个整数,但尺寸是怎么回事?(N将有多大?)问题到底是什么?X是一个3x8数组,我想把每行8个布尔值转换成一个int,所以输出将是一个长度为3、数据类型为int8的一维数组。N可能相当大,可以是10000-200000那么204来自哪里?这实际上是一个很好的问题。我不知道你为什么会被否决(除了输入错误的
int8
而不是uint8
)。我会选择x.view(np.uint8)
,因为我肯定它不会复制任何数据。除此之外,+1。
>>> np.packbits(np.uint8(x))
array([204, 12, 128], dtype=uint8)