Spec-Zone.ru › PyTorch 2

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, находится на той же устройстве и разделяет память с ним. Эти свойства можно контролировать с помощью ключевых аргументов dtype, device, copy, и requires_grad. Если возвращаемый тензор имеет другой тип данных, находится на другом устройстве или требуется копия, то он не будет разделять память с obj. Если requires_grad является True, то возвращаемый тензор будет требовать градиента, и если obj также является тензором с историей автоградиента, то возвращаемый тензор будет иметь ту же историю.

Когда obj не является тензором, массивом NumPy или капсулой DLPack, но реализует протокол буфера Python, то буфер интерпретируется как массив байтов, сгруппированных в соответствии с размером типа данных, переданного в dtype ключевой аргумент. (Если тип данных не передан, используется тип данных по умолчанию с плавающей точкой.) Возвращаемый тензор будет иметь указанный тип данных (или тип данных по умолчанию с плавающей точкой, если он не указан) и по умолчанию будет находиться на устройстве CPU и разделять память с буфером.

Когда obj является скаляром NumPy, возвращаемый тензор будет 0-мерным тензором на устройстве CPU и не будет разделять память (то есть copy=True). По умолчанию тип данных будет типом данных PyTorch, соответствующим типу данных скаляра NumPy.

Когда obj ни то, ни другое, а скаляр или последовательность скаляров, то возвращаемый тензор по умолчанию определит свой тип данных из значений скаляров, будет находиться на текущем устройстве по умолчанию и не будет разделять память.

См. также

torch.tensor() создает тензор, который всегда копирует данные из входного объекта. torch.from_numpy() создаёт тензор, который всегда разделяет память с массивами NumPy. torch.frombuffer() создаёт тензор, который всегда разделяет память с объектами, реализующими протокол буфера. torch.from_dlpack() создаёт тензор, который всегда разделяет память с капсулами DLPack.

Parameters

obj (object) – тензор, массив NumPy, капсула DLPack, объект, реализующий протокол буфера Python, скаляр или последовательность скаляров.

Keyword Arguments
  • dtype (torch.dtype, optional) – тип данных возвращаемого тензора. Значение по умолчанию: None, что приводит к тому, что тип данных возвращаемого тензора определяется по obj.
  • copy (bool, optional) – управляет тем, разделяет ли возвращаемый тензор память с obj. Значение по умолчанию: None, что приводит к тому, что возвращаемый тензор разделяет память с obj по возможности. Если True, то возвращаемый тензор не разделяет память. Если False, то возвращаемый тензор разделяет память с obj и генерируется ошибка, если это невозможно.
  • device (torch.device, optional) – устройство возвращаемого тензора. Значение по умолчанию: None, что приводит к использованию устройства obj. Или, если obj является последовательностью Python, будет использоваться текущее устройство по умолчанию.
  • requires_grad (bool, optional) – требует ли возвращаемый тензор градиент. Значение по умолчанию: 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)

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.asarray.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API