torch.frombuffer¶
- torch.frombuffer(buffer, *, dtype, count=-1, offset=0, requires_grad=False) → Tensor ¶
从实现 Python 缓冲区协议的对象创建一个 1 维
Tensor
。跳过缓冲区中的前
offset
个字节,并将剩余的原始字节解释为具有count
个元素的 1 维张量,类型为dtype
。注意以下两个条件中的任意一个必须成立:
1.
count
是一个正的非零数,且缓冲区中的总字节数大于offset
加上count
乘以dtype
的字节大小。2.
count
是负数,且缓冲区长度(字节数)减去offset
后的结果能够被dtype
的字节大小整除。返回的张量和缓冲区共享相同的内存。对张量的修改将反映在缓冲区中,反之亦然。返回的张量不可调整大小。
注意
此函数增加拥有共享内存的对象的引用计数。因此,在返回的张量超出作用域之前,此类内存不会被释放。
警告
当传递一个实现缓冲区协议的对象给此函数,但其数据不在 CPU 上时,此函数的行为是未定义的。这样做很可能会导致段错误。
警告
此函数不尝试推断
dtype
(因此,它不是可选的)。传递与源不同的dtype
可能会导致意外行为。- 参数:
缓冲区(对象)- 一个暴露缓冲区接口的 Python 对象。
- 关键字参数:
dtype(
torch.dtype
)- 返回张量的期望数据类型。count(int,可选)- 要读取的期望元素数量。如果为负,则读取所有元素(直到缓冲区末尾)。默认:-1。
offset(int,可选)- 在缓冲区开始处跳过的字节数。默认:0。
requires_grad (bool,可选) – 如果 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]) >>> # Interprets the signed char bytes as 32-bit integers. >>> # Each 4 signed char elements will be interpreted as >>> # 1 signed 32-bit integer. >>> import array >>> a = array.array('b', [-1, 0, 0, 0]) >>> torch.frombuffer(a, dtype=torch.int32) tensor([255], dtype=torch.int32)