Shortcuts

torch.frombuffer

torch.frombuffer(buffer, *, dtype, count=-1, offset=0, requires_grad=False) 张量

从实现 Python 缓冲协议的对象创建一个一维的 Tensor

跳过缓冲区中的前 offset 字节,并将剩余的原始字节解释为类型为 dtype 的 1 维张量,包含 count 个元素。

请注意,以下任一条件必须为真:

1. count 是一个正的非零数字,并且缓冲区中的总字节数 超过 offset 加上 count 乘以 dtype 的大小(以字节为单位)。

2. count 为负数,并且缓冲区的长度(字节数)减去 offsetdtype 大小(以字节为单位)的倍数。

返回的张量和缓冲区共享相同的内存。对张量的修改将反映在缓冲区中,反之亦然。返回的张量不可调整大小。

注意

此函数增加拥有共享内存的对象的引用计数。因此,在返回的张量超出作用域之前,此类内存不会被释放。

警告

当传递一个实现缓冲协议的对象时,如果其数据不在CPU上,此函数的行为是未定义的。这样做可能会导致段错误。

警告

此函数不会尝试推断dtype(因此,它不是可选的)。传递与其源不同的dtype可能会导致意外行为。

Parameters

缓冲区 (对象) – 一个暴露了缓冲区接口的Python对象。

Keyword Arguments
  • dtype (torch.dtype) – 返回张量所需的数据类型。

  • count (int, 可选) – 希望读取的元素数量。 如果为负数,将读取所有元素(直到缓冲区末尾)。默认值:-1。

  • 偏移量 (int, 可选) – 在缓冲区开始处跳过的字节数。默认值:0。

  • requires_grad (布尔值, 可选) – 如果 autograd 应该记录对返回张量的操作。默认值:False

示例:

>>> import array
>>> a = array.array('i', [1, 2, 3])
>>> t = torch.frombuffer(a, dtype=torch.int32)
>>> t
tensor([ 1,  2,  3])
>>> t[0] = -1
>>> a
array([-1,  2,  3])

>>> # 将带符号的字符字节解释为32位整数。
>>> # 每4个带符号的字符元素将被解释为
>>> # 1个带符号的32位整数。
>>> import array
>>> a = array.array('b', [-1, 0, 0, 0])
>>> torch.frombuffer(a, dtype=torch.int32)
tensor([255], dtype=torch.int32)