快捷方式

torch.asarray

torch.asarray(obj, *, dtype=None, device=None, copy=None, requires_grad=False) Tensor

obj 转换为张量。

obj 可以是以下之一

  1. 张量

  2. NumPy 数组或 NumPy 标量

  3. DLPack 胶囊

  4. 实现 Python 缓冲协议的对象

  5. 标量

  6. 标量序列

obj 是张量、NumPy 数组或 DLPack 胶囊时,返回的张量默认情况下将不需要梯度、具有与 obj 相同的数据类型、位于同一设备上,并与其共享内存。这些属性可以通过 dtypedevicecopyrequires_grad 关键字参数进行控制。如果返回的张量的数据类型不同、位于不同的设备上,或请求复制,则它将不会与其共享内存 obj。如果 requires_gradTrue,则返回的张量将需要梯度,如果 obj 也是具有 autograd 历史记录的张量,则返回的张量将具有相同的历史记录。

obj 不是张量、NumPy 数组或 DLPack 胶囊,而是实现了 Python 缓冲协议,则缓冲区将被解释为字节数组,这些字节数组根据传递给 dtype 关键字参数的数据类型的大小进行分组。(如果没有传递数据类型,则使用默认浮点数据类型。)返回的张量将具有指定的数据类型(如果未指定,则使用默认浮点数据类型),默认情况下位于 CPU 设备上,并与缓冲区共享内存。

obj 不是上述任何一种,而是 NumPy 标量时,返回的张量将是 CPU 上的 0 维张量,并且不与其共享内存(即 copy=True)。默认情况下,数据类型将是与 NumPy 标量的数据类型相对应的 PyTorch 数据类型。

obj 不是上述任何一种,而是标量或标量序列时,返回的张量默认情况下将从标量值推断其数据类型,位于当前默认设备上,并且不与其共享内存。

另请参阅

torch.tensor() 创建一个始终从输入对象复制数据的张量。 torch.from_numpy() 创建一个始终与 NumPy 数组共享内存的张量。 torch.frombuffer() 创建一个始终与实现缓冲协议的对象共享内存的张量。 torch.from_dlpack() 创建一个始终与 DLPack 胶囊共享内存的张量。

参数

obj (对象) – 张量、NumPy 数组、DLPack 胶囊、实现 Python 缓冲协议的对象、标量或标量序列。

关键字参数
  • dtype (torch.dtype, 可选) – 返回张量的 datatype。默认值:None,这会导致返回张量的 datatype 从 obj 推断得出。

  • copy (布尔值, 可选) – 控制返回的张量是否与 obj 共享内存。默认值:None,这会导致返回的张量尽可能与 obj 共享内存。如果为 True,则返回的张量不会共享其内存。如果为 False,则返回的张量会与其共享其内存 obj 并且如果无法共享,则会抛出错误。

  • device (torch.device, 可选) – 返回张量的设备。默认值:None,这会导致使用 obj 的设备。或者,如果 obj 是 Python 序列,则将使用当前默认设备。

  • requires_grad (布尔值, 可选) – 返回的张量是否需要梯度。默认值:False,这会导致返回的张量不需要梯度。如果为 True,则返回的张量将需要梯度,如果 obj 也是具有自动梯度历史的张量,则返回的张量将具有相同的历史。

示例

>>> a = torch.tensor([1, 2, 3])
>>> # Shares memory with tensor 'a'
>>> b = torch.asarray(a)
>>> a.data_ptr() == b.data_ptr()
True
>>> # Forces memory copy
>>> c = torch.asarray(a, copy=True)
>>> a.data_ptr() == c.data_ptr()
False

>>> a = torch.tensor([1., 2., 3.], requires_grad=True)
>>> b = a + 2
>>> b
tensor([3., 4., 5.], grad_fn=<AddBackward0>)
>>> # Shares memory with tensor 'b', with no grad
>>> c = torch.asarray(b)
>>> c
tensor([3., 4., 5.])
>>> # Shares memory with tensor 'b', retaining autograd history
>>> d = torch.asarray(b, requires_grad=True)
>>> d
tensor([3., 4., 5.], grad_fn=<AddBackward0>)

>>> array = numpy.array([1, 2, 3])
>>> # Shares memory with array 'array'
>>> t1 = torch.asarray(array)
>>> array.__array_interface__['data'][0] == t1.data_ptr()
True
>>> # Copies memory due to dtype mismatch
>>> t2 = torch.asarray(array, dtype=torch.float32)
>>> array.__array_interface__['data'][0] == t2.data_ptr()
False

>>> scalar = numpy.float64(0.5)
>>> torch.asarray(scalar)
tensor(0.5000, dtype=torch.float64)

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获得针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源