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'))