Numpy packbits() 函数
NumPy packbits() 函数用于将二进制数组的元素打包成 uint8 数组的位。此函数将一个二进制值数组(即 0 和 1)压缩成一个 8 位无符号整数数组,其中生成的 uint8 数组中的每个位代表输入数组中的一个元素。
在此函数中,我们可以沿指定轴或扁平化的输入数组进行操作。它在处理大型二进制数据数组时,对于减少内存使用量特别有用。
语法
以下是 Numpy packbits() 函数的语法 -
numpy.packbits(a, /, axis=None, bitorder='big')
参数
以下是 Numpy packbits() 函数的参数 -
- a(array_like): 输入二进制值数组。
- axis: 此参数是打包位时所沿的轴。如果为 None,则数组将被展平。
- bitorder:打包表示中的位顺序,可以是"大"或"小"。
返回值
此函数返回一个 uint8 类型的数组,其中包含打包后的字节。
示例 1
以下是 Numpy packbits() 函数的基本示例,该函数将一维位数组打包成字节数组 -
import numpy as np # 定义输入的位数组(0 和 1) bits = np.array([1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1], dtype=np.uint8) # 将位打包成字节 packed = np.packbits(bits) print(packed)
以下是 packbits() 函数的输出 -
[178 229]
示例 2
在 NumPy 中沿默认轴打包二维数组需要将数组每行中的二进制值 0 和 1 转换为更紧凑的表示形式,例如字节。
packbits() 函数的默认轴为 -1,它指的是最后一个轴,通常是二维数组的列。以下是示例 -
import numpy as np # 定义一个二维位数组 bit_array = np.array([[0, 1, 1, 0, 0, 1, 1, 1], [1, 0, 1, 1, 0, 0, 0, 0]], dtype=np.uint8) # 将位打包成字节 packed_array = np.packbits(bit_array) print("原始位数组: ", bit_array) print("打包后的数组:", packed_array)
以下是上述示例的输出 -
原始位数组: [[0 1 1 0 0 1 1 1] [1 0 1 1 0 0 0 0]] 打包后的数组:[103 176]
示例 3
以下示例展示了 packbits() 函数如何作用于三维数组 -
import numpy as np # 创建三维数组 arr = np.array([[[1, 0, 1], [0, 1, 0]], [[1, 1, 0], [0, 0, 1]], [[1, 1, 0], [0, 0, 1]]]) # 显示数组 print("Array...") print(arr) # 获取数据类型 print("Array datatype...", arr.dtype) # 获取数组的维度 print("数组维度...", arr.ndim) # 获取数组的形状 print("我们的数组形状...", arr.shape) # 获取数组元素的数量 print("数组中的元素...", arr.size) # 要将二进制数组的元素打包成 uint8 数组的位,请使用 Python Numpy 中的 numpy.packbits() 方法。 # 通过在末尾插入零位,将结果填充为完整字节。 res = np.packbits(arr) print("结果...", res)
以下是上述示例的输出 -
数组... [[[1 0 1] [0 1 0]] [[1 1 0] [0 0 1]] [[1 1 0] [0 0 1]]] 数组数据类型... int64 数组维度... 3 我们的数组形状... (3, 2, 3) 数组元素数... 18 结果... [171 28 64]