Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将布尔numpy数组的行编码为字节_Python_Numpy - Fatal编程技术网

Python 将布尔numpy数组的行编码为字节

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

我有一个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)
我想这样可以:

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)