pub struct FixedShapeTensor {
value_type: DataType,
metadata: FixedShapeTensorMetadata,
}Expand description
The extension type for fixed shape tensor.
Extension name: arrow.fixed_shape_tensor.
The storage type of the extension: FixedSizeList where:
value_typeis the data type of individual tensor elements.list_sizeis the product of all the elements in tensor shape.
Extension type parameters:
value_type: the Arrow data type of individual tensor elements.shape: the physical shape of the contained tensors as an array.
Optional parameters describing the logical layout:
dim_names: explicit names to tensor dimensions as an array. The length of it should be equal to the shape length and equal to the number of dimensions.dim_namescan be used if the dimensions have well-known names and they map to the physical layout (row-major).permutation: indices of the desired ordering of the original dimensions, defined as an array. The indices contain a permutation of the values[0, 1, .., N-1]whereNis the number of dimensions. The permutation indicates which dimension of the logical layout corresponds to which dimension of the physical tensor (the i-th dimension of the logical view corresponds to the dimension with numberpermutations[i]of the physical tensor). Permutation can be useful in case the logical order of the tensor is a permutation of the physical order (row-major). When logical and physical layout are equal, the permutation will always be([0, 1, .., N-1])and can therefore be left out.
Description of the serialization:
The metadata must be a valid JSON object including shape of the
contained tensors as an array with key shape plus optional
dimension names with keys dim_names and ordering of the
dimensions with key permutation.
Example: { "shape": [2, 5]}
Example with dim_names metadata for NCHW ordered data:
{ "shape": [100, 200, 500], "dim_names": ["C", "H", "W"]}
Example of permuted 3-dimensional tensor:
{ "shape": [100, 200, 500], "permutation": [2, 0, 1]}
This is the physical layout shape and the shape of the logical layout
would in this case be [500, 100, 200].
https://arrow.apache.org/docs/format/CanonicalExtensions.html#fixed-shape-tensor
Fields§
§value_type: DataTypeThe data type of individual tensor elements.
metadata: FixedShapeTensorMetadataThe metadata of this extension type.
Implementations§
Source§impl FixedShapeTensor
impl FixedShapeTensor
Sourcepub fn try_new(
value_type: DataType,
shape: impl IntoIterator<Item = usize>,
dimension_names: Option<Vec<String>>,
permutations: Option<Vec<usize>>,
) -> Result<Self, ArrowError>
pub fn try_new( value_type: DataType, shape: impl IntoIterator<Item = usize>, dimension_names: Option<Vec<String>>, permutations: Option<Vec<usize>>, ) -> Result<Self, ArrowError>
Returns a new fixed shape tensor extension type.
§Error
Return an error if the provided dimension names or permutations are invalid.
Sourcepub fn value_type(&self) -> &DataType
pub fn value_type(&self) -> &DataType
Returns the value type of the individual tensor elements.
Sourcepub fn shape(&self) -> &[usize]
pub fn shape(&self) -> &[usize]
Returns the physical shape of the contained tensors.
Self::dimensions and Self::list_size do not identify this
shape. [2, 6] and [3, 4] are both 2-dimensional and both have
12 elements.
let tensor = FixedShapeTensor::try_new(DataType::Float32, [2, 6], None, None).unwrap();
assert_eq!(tensor.shape(), &[2, 6]);
assert_eq!(tensor.list_size(), 12);Sourcepub fn dimensions(&self) -> usize
pub fn dimensions(&self) -> usize
Returns the number of dimensions in this fixed shape tensor.
Sourcepub fn dimension_names(&self) -> Option<&[String]>
pub fn dimension_names(&self) -> Option<&[String]>
Returns the names of the dimensions in this fixed shape tensor, if set.
Sourcepub fn permutations(&self) -> Option<&[usize]>
pub fn permutations(&self) -> Option<&[usize]>
Returns the indices of the desired ordering of the original dimensions, if set.
Sourcepub fn logical_shape(&self) -> Vec<usize>
pub fn logical_shape(&self) -> Vec<usize>
Returns the logical shape.
Logical dimension i has the size of physical dimension
permutations[i]. Without a permutation, this is the physical shape.
Physical shape [100, 200, 500] and permutation [2, 0, 1] have
logical shape [500, 100, 200].
let tensor = FixedShapeTensor::try_new(
DataType::Float32,
[100, 200, 500],
None,
Some(vec![2, 0, 1]),
)
.unwrap();
assert_eq!(tensor.logical_shape(), vec![500, 100, 200]);Trait Implementations§
Source§impl Clone for FixedShapeTensor
impl Clone for FixedShapeTensor
Source§impl Debug for FixedShapeTensor
impl Debug for FixedShapeTensor
Source§impl ExtensionType for FixedShapeTensor
impl ExtensionType for FixedShapeTensor
Source§const NAME: &'static str = "arrow.fixed_shape_tensor"
const NAME: &'static str = "arrow.fixed_shape_tensor"
Source§type Metadata = FixedShapeTensorMetadata
type Metadata = FixedShapeTensorMetadata
Source§fn metadata(&self) -> &Self::Metadata
fn metadata(&self) -> &Self::Metadata
&() if
if this extension type defines no metadata (Self::Metadata=()).Source§fn serialize_metadata(&self) -> Option<String>
fn serialize_metadata(&self) -> Option<String>
None if this extension type defines no metadata
(Self::Metadata=()). Read moreSource§fn deserialize_metadata(
metadata: Option<&str>,
) -> Result<Self::Metadata, ArrowError>
fn deserialize_metadata( metadata: Option<&str>, ) -> Result<Self::Metadata, ArrowError>
None for the serialized metadata and return
Ok(()). Read moreSource§fn supports_data_type(&self, data_type: &DataType) -> Result<(), ArrowError>
fn supports_data_type(&self, data_type: &DataType) -> Result<(), ArrowError>
Ok(()) iff the given data type is supported by this extension
type.