numpy.frombuffer 函数用于从缓冲区(如字节、字节数组或其他支持缓冲区接口的对象)创建一个 NumPy 数组。这个函数对于处理二进制数据或从文件中读取数据特别有用。本文主要介绍一下NumPy中frombuffer方法的使用。

numpy.frombuffer

numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)

将缓冲区解释为一维数组。

参数:

buffer :buffer_like

公开缓冲区接口的对象。

dtype :data-type, 可选

返回array的数据类型;默认值:float。

countint, 可选

要阅读的条目数。-1表示缓冲区中的所有数据。

offsetint, 可选

从这个偏移量(以字节为单位)开始读取缓冲区;默认值:0

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)



推荐文档

相关文档

大家感兴趣的内容

随机列表