TensorDictBase.from_namedtuple#
- classmethod TensorDictBase.from_namedtuple(named_tuple, *, auto_batch_size: bool = False, batch_dims: int | None = None, device: device | None = None, batch_size: Size | None = None)#
Converts a named tuple to a tensordict whose keys are its field names.
Each field value is converted with
from_any(), so a nested named tuple or dict becomes a nested tensordict and a number becomes a tensor. Thetorch.return_typesresults oftorch.max,torch.sortand the like are accepted too.to_namedtuple()converts back.- Parameters:
named_tuple (NamedTuple) – the named tuple to convert.
- Keyword Arguments:
auto_batch_size (bool, optional) – if
True, sets the batch size to the largest leading shape that all the entries share. Exclusive withbatch_size. Defaults toFalse.batch_dims (int, optional) – with
auto_batch_size, the maximum number of batch dimensions. Ignored withoutauto_batch_size, with aFutureWarningwhen it would change the result. Starting with TensorDict 0.17, the default will change to turning onauto_batch_sizewhenbatch_dimsis given, asfrom_dictdoes. Defaults toNone.device (device, str or int, optional) – the device of the result. Leaves on another device are moved to it.
Noneleaves each leaf where it is, and the result has no device. Defaults toNone.batch_size (Size or list of int, optional) – the batch size of the result: the leading dimensions that all its entries share. It applies to the nested tensordicts too. Exclusive with
auto_batch_size. Defaults toNone, an empty batch size.
- Returns:
A
TensorDict.- Raises:
TypeError – if both
auto_batch_size=Trueandbatch_sizeare given.
Examples
>>> from tensordict import TensorDict >>> import torch >>> data = TensorDict({ ... "a_tensor": torch.zeros((3)), ... "nested": {"a_tensor": torch.zeros((3)), "a_string": "zero!"}}, [3]) >>> nt = data.to_namedtuple() >>> nt GenericDict(a_tensor=tensor([0., 0., 0.]), nested=GenericDict(a_tensor=tensor([0., 0., 0.]), a_string='zero!')) >>> td = TensorDict.from_namedtuple(nt, auto_batch_size=True) >>> td.batch_size, td["nested", "a_string"] (torch.Size([3]), 'zero!') >>> sorted(TensorDict.from_namedtuple(torch.tensor([2, 0, 1]).max(0)).keys()) ['indices', 'values']
Every tensordict class and every tensorclass has this method. For the other methods, see Methods by task.