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)