numpy.frombuffer
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
将缓冲区解释为一维数组。
参数: | buffer : 公开缓冲区接口的对象。 dtype : 返回array的数据类型;默认值:float。 count : 要阅读的条目数。 offset : 从这个偏移量(以字节为单位)开始读取缓冲区;默认值: |
Notes
如果缓冲区中的数据不是机器字节顺序的,则应将其指定为数据类型的一部分,例如:
import numpy as np # 创建一个整数类型的 dtype 对象 dt = np.dtype(int) # 修改字节顺序为大端序 dt = dt.newbyteorder('>') # 创建一个字节缓冲区 buf = b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04' # 从字节缓冲区创建 NumPy 数组 array = np.frombuffer(buf, dtype=dt) print("从字节缓冲区创建的 NumPy 数组:") print(array)
结果数组的数据将不会被字节包装,但是将被正确地解释
例子
1)从字节数据创建 NumPy 数组
import numpy as np # 创建一个字节对象 byte_data = b'\x01\x02\x03\x04\x05\x06\x07\x08' # 从字节数据创建 NumPy 数组 array = np.frombuffer(byte_data, dtype=np.uint8) print("从字节数据创建的数组:") print(array)
2)指定数据类型和读取数量
import numpy as np # 创建一个字节对象 byte_data = b'\x01\x00\x02\x00\x03\x00\x04\x00' # 从字节数据创建 NumPy 数组,指定数据类型为 uint16 array = np.frombuffer(byte_data, dtype=np.uint16) print("指定数据类型为 uint16 的数组:") print(array) # 从字节数据创建 NumPy 数组,指定数据类型为 uint16,并只读取前两个元素 array_partial = np.frombuffer(byte_data, dtype=np.uint16, count=2) print("\n只读取前两个元素的数组:") print(array_partial)
3)指定偏移量
python复制代码import numpy as np # 创建一个字节对象 byte_data = b'\x01\x02\x03\x04\x05\x06\x07\x08' # 从字节数据创建 NumPy 数组,指定偏移量为 2 array_with_offset = np.frombuffer(byte_data, dtype=np.uint8, offset=2) print("指定偏移量为 2 的数组:") print(array_with_offset)
4)使用示例
import numpy as np # 示例 1: 从字节数据中提取部分内容 s = b'hello world' array = np.frombuffer(s, dtype='S1', count=5, offset=6) print("从字节数据中提取部分内容:") print(array) # 示例 2: 从字节数据创建 NumPy 数组 array = np.frombuffer(b'\x01\x02', dtype=np.uint8) print("\n从字节数据创建的 NumPy 数组:") print(array) # 示例 3: 指定读取数量 array = np.frombuffer(b'\x01\x02\x03\x04\x05', dtype=np.uint8, count=3) print("\n指定读取数量的 NumPy 数组:") print(array)