numpy.unpackbits#

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

将 uint8 数组的元素解压到二值输出数组中。

a 的每个元素表示一个位字段,应将其解压到一个二值输出数组中。输出数组的形状可以是一维(如果 axisNone),也可以与输入数组的形状相同,沿指定的轴进行解压。

参数:
andarray,uint8 类型

输入数组。

axisint,可选

进行位解压的维度。None 表示解压扁平化数组。

countint 或 None,可选

沿 axis 解压的元素数量,作为撤销打包非 8 的倍数大小效果的一种方式。非负数表示仅解压 count 个位。负数表示从末尾去除这么多位。None 表示解压整个数组(默认值)。大于可用位数的计数将向输出添加零填充。负计数不得超过可用位数。

bitorder{'big','little'},可选

返回位的顺序。'big' 将模拟 bin(val),3 = 0b00000011 => [0, 0, 0, 0, 0, 0, 1, 1],'little' 将反转顺序为 [1, 1, 0, 0, 0, 0, 0, 0]。默认为 'big'。

返回:
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