from_struct_array#
- tensordict.from_struct_array(struct_array, *, auto_batch_size: bool = False, batch_dims: int | None = None, device: device | None = None, batch_size: Size | None = None) TensorDictBase#
Converts a NumPy structured array to a tensordict, with one entry per field.
The tensors share memory with the array. See
TensorDictBase.from_struct_array.- Parameters:
struct_array (np.ndarray) – the structured array 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. Exclusive with
auto_batch_size. Defaults toNone, which uses the shape of the array.
- Returns:
A
TensorDict.
Examples
>>> import numpy as np >>> from tensordict import from_struct_array >>> x = np.array( ... [("Rex", 9, 81.0), ("Fido", 3, 27.0)], ... dtype=[("name", "U10"), ("age", "i4"), ("weight", "f4")], ... ) >>> td = from_struct_array(x) >>> td.batch_size, td["age"] (torch.Size([2]), tensor([9, 3], dtype=torch.int32)) >>> x["age"] += 1 # the tensordict shares memory with the array >>> td["age"] tensor([10, 4], dtype=torch.int32) >>> bool((td.to_struct_array() == x).all()) True