1

我有一个尺寸为 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)
4

2 回答 2

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

怎么样?

于 2013-10-22T13:15:47.310 回答
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 循环向下推到 numpy 以加快速度。(需要是uint8而不是int8,否则结果是[ -52 12 -128])

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

于 2013-10-22T12:41:51.737 回答