Python numpy.packbits函数方法的使用

numpy.packbits 是 NumPy 中用于将布尔数组或 0/1 数组“打包”为字节(8 位)的函数。它的作用是将每 8 个位合并成一个字节,从而压缩数据。可以用于二值图像压缩(黑白图像打包成位图)、网络协议位打包和数据序列化与压缩等。本文主要介绍一下NumPy中packbits方法的使用。

numpy.packbits

numpy.packbits(a, axis=None, bitorder='big')

将二进制值数组的元素打包为uint8数组中的位。

通过在末尾插入零位将结果填充为完整字节。

参数 :

a :array_like

一个整数或布尔数组,其元素应打包为位。

axisint, 可选

进行位打包的维度。None表示打包扁平化数组。

bit或der{‘big’, ‘little’}, 可选

输入位的顺序。 'big'将模拟bin(val),

[0,0,0,0,0,0,1,1] =>3 = 0b00000011

'little'将颠倒顺序,因此[1、1、0、0、0、0、0、0] =>3。 

默认为‘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')) 

推荐阅读
cjavapy编程之路首页