1

Nx8 次元の numpy 配列があり、dtyp=boolean で、bin2dec によって各行がバイトに変換される numpy 1-d 配列に変換したい

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 に押し下げて速度を上げようとします。(int8 ではなく uint8 である必要があります。それ以外の場合、結果は [ -52 12 -128] になります)

編集:forループは8回しか実行されないため(floatごとに1回)、実際にはそれほど遅くはないはずです

于 2013-10-22T12:41:51.737 に答える