numpy.unpackbits#

numpy.unpackbits(a, /, axis=None, count=None, bitorder='big')#

将 uint8 数组的元素解包到二进制值的输出数组中.

a 的每个元素代表一个应解包为二值输出数组的位域.输出数组的形状要么是 1-D(如果 axisNone),要么与输入数组的形状相同,并在指定的轴上进行解包.

参数:
andarray, uint8 类型

输入数组.

axisint, 可选

进行位解包的维度.``None`` 表示解包展平的数组.

count整数或无,可选

沿 axis 解包的元素数量,提供了一种方式来撤销打包一个不是八的倍数的大小的效果.一个非负数意味着只解包 count 位.一个负数意味着从末尾修剪掉那么多位.``None`` 意味着解包整个数组(默认).数量大于可用位数将在输出中添加零填充.负数数量不得超过可用位数.

在 1.17.0 版本加入.

bitorder{‘大’, ‘小’}, 可选

返回位的顺序.’big’ 将模仿 bin(val),``3 = 0b00000011 => [0, 0, 0, 0, 0, 0, 1, 1]``,’little’ 将反转顺序为 [1, 1, 0, 0, 0, 0, 0, 0].默认为 ‘big’.

在 1.17.0 版本加入.

返回:
unpackedndarray, uint8 类型

这些元素是二值的(0 或 1).

参见

packbits

将二值数组的元素打包成 uint8 数组中的位.

示例

>>> import numpy as np
>>> a = np.array([[2], [7], [23]], dtype=np.uint8)
>>> a
array([[ 2],
       [ 7],
       [23]], dtype=uint8)
>>> b = np.unpackbits(a, axis=1)
>>> b
array([[0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 1, 1, 1],
       [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)
>>> c = np.unpackbits(a, axis=1, count=-3)
>>> c
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0]], dtype=uint8)
>>> p = np.packbits(b, axis=0)
>>> np.unpackbits(p, axis=0)
array([[0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 1, 1, 1],
       [0, 0, 0, 1, 0, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
>>> np.array_equal(b, np.unpackbits(p, axis=0, count=b.shape[0]))
True