快捷方式

torch.asarray

torch.asarray(obj: Any, *, dtype: Optional[dtype], device: Optional[DeviceLikeType], copy: Optional[bool] = None, requires_grad: bool = False) Tensor

obj 转换为张量。

obj 可以是以下之一

  1. 张量

  2. NumPy 数组或 NumPy 标量

  3. DLPack 胶囊

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

  5. 标量

  6. 标量序列

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

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 (object) – 张量、NumPy 数组、DLPack 胶囊、实现 Python 缓冲区协议的对象、标量或标量序列。

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

  • copy (bool, 可选) – 控制返回的张量是否与 obj 共享内存。默认值:None,这将导致返回的张量在可能的情况下与 obj 共享内存。如果为 True,则返回的张量不共享其内存。如果为 False,则返回的张量与 obj 共享其内存,如果无法共享则会引发错误。

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

  • requires_grad (bool, 可选) – 返回的张量是否需要梯度。默认值: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 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

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

查看资源