torch.asarray
-
torch.asarray(obj, *, dtype=None, device=None, copy=None, requires_grad=False) → Tensor -
Преобразует
objв тензор.objможет быть одним из:- тензор
- массив NumPy или скаляр NumPy
- капсула DLPack
- объект, реализующий протокол буфера Python
- скаляр
- последовательность скаляров
Когда
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также является тензором с историей автоградиента, то возвращаемый тензор будет иметь ту же историю.
-
dtype (
Пример:
>>> 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