numpy.packbits
numpy.packbits(a, axis=None, bitorder='big')
将二进制值数组的元素打包为uint8数组中的位。
通过在末尾插入零位将结果填充为完整字节。
参数 : | a :array_like 一个整数或布尔数组,其元素应打包为位。 axis : 进行位打包的维度。 bit或der : 输入位的顺序。 'big'将模拟bin(val),
'little'将颠倒顺序,因此 默认为‘big’。 1.17.0版中的新功能。 |
返回值 : | packed :ndarray uint8类型的数组, 其元素表示对应于输入元素的逻辑(0或非零)值的位。 包装的形状具有与输入相同的尺寸数( 除非轴为None,在这种情况下输出为1-D)。 |
例子
1)一维数组打包
import numpy as np a = np.array([1, 0, 1, 0, 0, 1, 1, 0], dtype=np.uint8) packed = np.packbits(a) print(packed) # [166] # 解释:10100110(二进制) = 0xA6 = 166
2)多维数组按行打包
import numpy as np a = np.array([ [1, 0, 1, 1, 0, 0, 0, 1], [0, 1, 1, 0, 1, 0, 0, 0] ], dtype=np.uint8) packed = np.packbits(a, axis=1) print(packed) # 输出:[[177] [104]] # 第一行二进制:10110001 = 0xB1 = 177 # 第二行二进制:01101000 = 0x68 = 104
3)布尔数组
import numpy as np a = np.array([True, False, True, False, False, True, True, True]) packed = np.packbits(a) print(packed) # [167] # 解释:10100111(二进制)= 0xA7 = 167
4)bitorder 参数对比
import numpy as np a = np.array([1, 0, 1, 0, 0, 1, 1, 0], dtype=np.uint8) # [166] = 10100110 print(np.packbits(a, bitorder='big')) # [103] = 01100111 print(np.packbits(a, bitorder='little'))