Proyecto Final - Turinmachin
Recreación del minijuego de matemáticas de Brain-Age usando redes neuronales
Loading...
Searching...
No Matches
Tensor< T, Rank > Class Template Reference

Representa un tensor de tipo T y rango Rank. More...

#include <tensor.h>

Public Member Functions

 Tensor (const std::array< size_t, Rank > &shape)
 Constructor que inicializa el tensor con una forma dada.
template<typename... Dims>
requires (sizeof...(Dims) == Rank)
 Tensor (const Dims... dims)
 Constructor variádico para inicializar la forma del tensor.
constexpr auto operator== (const Tensor< T, Rank > &other) const -> bool
auto operator= (std::initializer_list< T > list) -> Tensor< T, Rank > &
constexpr auto operator() (const auto... idxs) -> T &
 Acceso a un elemento por índices.
constexpr auto operator() (const auto... idxs) const -> const T &
auto operator() (const std::array< size_t, Rank > &idxs) -> T &
auto operator() (const std::array< size_t, Rank > &idxs) const -> const T &
auto operator[] (const size_t idx) -> T &
auto operator[] (const size_t idx) const -> const T &
auto size () const -> size_t
auto shape () const noexcept -> const std::array< size_t, Rank > &
void reshape (const std::array< size_t, Rank > &new_shape)
 Cambia la forma del tensor actual.
template<typename... Dims>
requires (sizeof...(Dims) == Rank)
void reshape (const Dims... dims)
 Cambia la forma del tensor actual. @taram Dims Nuevo "Rank" del tensor. @complexity O(Rank).
void fill (const T &value) noexcept
 Llena la data de un tesor con un valor.
auto row (const size_t index) const -> Tensor< T, 2 > requires(Rank==2)
 Genera tensor con fila particular.
void set_row (const size_t index, const Tensor< T, 2 > &row_tensor)
 Cambia fila especifica de un tensor.
auto slice (const size_t index) const -> Tensor< T, 2 > requires(Rank==3)
 Genera tensor con fila particular para tensor de Rank 3.
void set_slice (const size_t index, const Tensor< T, 2 > &slice)
 Cambia el subtensor asignado.
auto broadcast (const Tensor< T, Rank > &rhs, auto fn) const -> Tensor< T, Rank >
 Realiza Broadcasting para un tensor.
auto operator+ (const Tensor< T, Rank > &other) const -> Tensor< T, Rank >
auto operator+ (const T &scalar) const -> Tensor< T, Rank >
auto operator- (const Tensor< T, Rank > &other) const -> Tensor< T, Rank >
auto operator- (const T &scalar) const -> Tensor< T, Rank >
auto operator- () const -> Tensor< T, Rank >
auto operator* (const Tensor< T, Rank > &other) const -> Tensor< T, Rank >
auto operator* (const T &scalar) const -> Tensor< T, Rank >
auto operator/ (const Tensor< T, Rank > &other) const -> Tensor< T, Rank >
auto operator/ (const T &scalar) const -> Tensor< T, Rank >
auto begin () noexcept
auto begin () const noexcept
auto end () noexcept
auto end () const noexcept
constexpr auto transpose_2d () const -> Tensor< T, 2 >
 Trasponer un tensor de dimension 2. @complexity O(n).
constexpr auto transpose_2d () const -> Tensor< T, Rank > requires(Rank > 2)
 Trasponer un tensor de dimension n mayor a 2. @complexity O(n).
constexpr auto apply (auto fn) const -> Tensor< T, Rank >
 Aplica una funcion a todos los elementos del tensor.

Friends

auto operator+ (const T &scalar, const Tensor &tensor) -> Tensor< T, Rank >
auto operator- (const T &scalar, const Tensor &tensor) -> Tensor< T, Rank >
auto operator* (const T &scalar, const Tensor &tensor) -> Tensor< T, Rank >
auto operator/ (const T &scalar, const Tensor &tensor) -> Tensor< T, Rank >
auto operator<< (std::ostream &out, const Tensor< T, Rank > &tensor) -> std::ostream &requires(Rank > 1)
auto operator<< (std::ostream &out, const Tensor< T, Rank > &tensor) -> std::ostream &requires(Rank==1)

Detailed Description

template<typename T, size_t Rank>
class Tensor< T, Rank >

Representa un tensor de tipo T y rango Rank.

Un tensor es una estructura de datos multidimensional que puede almacenar elementos de cualquier tipo T. Esta clase admite tensores de cualquier rango (dimensionalidad), con acceso eficiente, operaciones matemáticas, y soporte para broadcasting.

Template Parameters
TTipo de dato almacenado (float, double, int, etc).
RankDimensionalidad del tensor.

Constructor & Destructor Documentation

◆ Tensor() [1/2]

template<typename T, size_t Rank>
utec::algebra::Tensor< T, Rank >::Tensor ( const std::array< size_t, Rank > & shape)
inlineexplicit

Constructor que inicializa el tensor con una forma dada.

Parameters
shapeArreglo con el tamaño en cada dimensión. @complexity O(n), donde n es el producto de todas las dimensiones.

◆ Tensor() [2/2]

template<typename T, size_t Rank>
template<typename... Dims>
requires (sizeof...(Dims) == Rank)
utec::algebra::Tensor< T, Rank >::Tensor ( const Dims... dims)
inlineexplicit

Constructor variádico para inicializar la forma del tensor.

Parameters
dimsDimensiones individuales. @complexity O(n), donde n es el producto de todas las dimensiones.

Member Function Documentation

◆ apply()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::apply ( auto fn) const -> Tensor<T, Rank>
inlineconstexpr

Aplica una funcion a todos los elementos del tensor.

Parameters
fnFuncion a aplicar a los elementos del tensor. @complexity O(n)*F donde F es la complejidad de fn.
Returns
Tensor modificado por la funcion.

◆ begin() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::begin ( ) const
inlinenodiscardnoexcept

◆ begin() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::begin ( )
inlinenoexcept

◆ broadcast()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::broadcast ( const Tensor< T, Rank > & rhs,
auto fn ) const -> Tensor<T, Rank>
inline

Realiza Broadcasting para un tensor.

Parameters
rhsTensor de referencia para hacer broadcasting.
fnFunción que se va aplicar. @complexity O(n).
Returns
Tensor adaptado apto para operaciones.

◆ end() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::end ( ) const
inlinenodiscardnoexcept

◆ end() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::end ( )
inlinenoexcept

◆ fill()

template<typename T, size_t Rank>
void utec::algebra::Tensor< T, Rank >::fill ( const T & value)
inlinenoexcept

Llena la data de un tesor con un valor.

Parameters
valueEl valor con el que se quiere llenar. @complexity O(n)

◆ operator()() [1/4]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator() ( const auto... idxs) -> T&
inlineconstexpr

Acceso a un elemento por índices.

Parameters
idxsLista de índices de acceso.
Returns
Referencia al elemento en la posición dada. @complexity O(Rank)

◆ operator()() [2/4]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator() ( const auto... idxs) const -> const T&
inlinenodiscardconstexpr

◆ operator()() [3/4]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator() ( const std::array< size_t, Rank > & idxs) -> T&
inline

◆ operator()() [4/4]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator() ( const std::array< size_t, Rank > & idxs) const -> const T&
inline

◆ operator*() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator* ( const T & scalar) const -> Tensor<T, Rank>
inline

◆ operator*() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator* ( const Tensor< T, Rank > & other) const -> Tensor<T, Rank>
inline

◆ operator+() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator+ ( const T & scalar) const -> Tensor<T, Rank>
inline

◆ operator+() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator+ ( const Tensor< T, Rank > & other) const -> Tensor<T, Rank>
inline

◆ operator-() [1/3]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator- ( ) const -> Tensor<T, Rank>
inline

◆ operator-() [2/3]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator- ( const T & scalar) const -> Tensor<T, Rank>
inline

◆ operator-() [3/3]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator- ( const Tensor< T, Rank > & other) const -> Tensor<T, Rank>
inline

◆ operator/() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator/ ( const T & scalar) const -> Tensor<T, Rank>
inline

◆ operator/() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator/ ( const Tensor< T, Rank > & other) const -> Tensor<T, Rank>
inline

◆ operator=()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator= ( std::initializer_list< T > list) -> Tensor<T, Rank>&
inline

◆ operator==()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator== ( const Tensor< T, Rank > & other) const -> bool
inlinenodiscardconstexpr

◆ operator[]() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator[] ( const size_t idx) -> T&
inline

◆ operator[]() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::operator[] ( const size_t idx) const -> const T&
inline

◆ reshape() [1/2]

template<typename T, size_t Rank>
template<typename... Dims>
requires (sizeof...(Dims) == Rank)
void utec::algebra::Tensor< T, Rank >::reshape ( const Dims... dims)
inline

Cambia la forma del tensor actual. @taram Dims Nuevo "Rank" del tensor. @complexity O(Rank).

◆ reshape() [2/2]

template<typename T, size_t Rank>
void utec::algebra::Tensor< T, Rank >::reshape ( const std::array< size_t, Rank > & new_shape)
inline

Cambia la forma del tensor actual.

Parameters
new_shapeNueva forma del tensor. @complexity O(Rank).

◆ row()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::row ( const size_t index) const -> Tensor<T, 2> requires(Rank == 2)
inline

Genera tensor con fila particular.

Parameters
indexFila particular. @complexity O(k) donde k es el tamanio de la fila.
Returns
Fila que coincida con el indice otorgado de la matriz.

◆ set_row()

template<typename T, size_t Rank>
void utec::algebra::Tensor< T, Rank >::set_row ( const size_t index,
const Tensor< T, 2 > & row_tensor )
inline

Cambia fila especifica de un tensor.

Parameters
indexPosicion de la fila.
row_tensorNueva fila. @complexity O(k) donde k es el tamanio de la fila.

◆ set_slice()

template<typename T, size_t Rank>
void utec::algebra::Tensor< T, Rank >::set_slice ( const size_t index,
const Tensor< T, 2 > & slice )
inline

Cambia el subtensor asignado.

Parameters
indexPosicion del subtensor a cambiar. @complexity O(n*m) donde n y m son las dimensiones del subtensor rango 2.

◆ shape()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::shape ( ) const -> const std::array<size_t, Rank>&
inlinenoexcept
Here is the caller graph for this function:

◆ size()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::size ( ) const -> size_t
inlinenodiscard
Here is the caller graph for this function:

◆ slice()

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::slice ( const size_t index) const -> Tensor<T, 2> requires(Rank == 3)
inline

Genera tensor con fila particular para tensor de Rank 3.

Parameters
indexFila a cambiar. @complexity O(n*m) donde n y m son las dimensiones del subtensor rango 2.
Returns
Tensor con la fila indicada.

◆ transpose_2d() [1/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::transpose_2d ( ) const -> Tensor<T, 2>
inlinenodiscardconstexpr

Trasponer un tensor de dimension 2. @complexity O(n).

Returns
Tensor traspuesto.

◆ transpose_2d() [2/2]

template<typename T, size_t Rank>
auto utec::algebra::Tensor< T, Rank >::transpose_2d ( ) const -> Tensor<T, Rank> requires(Rank > 2)
inlinenodiscardconstexpr

Trasponer un tensor de dimension n mayor a 2. @complexity O(n).

Returns
Tensor traspuesto.

◆ operator*

template<typename T, size_t Rank>
auto operator* ( const T & scalar,
const Tensor< T, Rank > & tensor ) -> Tensor<T, Rank>
friend

◆ operator+

template<typename T, size_t Rank>
auto operator+ ( const T & scalar,
const Tensor< T, Rank > & tensor ) -> Tensor<T, Rank>
friend

◆ operator-

template<typename T, size_t Rank>
auto operator- ( const T & scalar,
const Tensor< T, Rank > & tensor ) -> Tensor<T, Rank>
friend

◆ operator/

template<typename T, size_t Rank>
auto operator/ ( const T & scalar,
const Tensor< T, Rank > & tensor ) -> Tensor<T, Rank>
friend

◆ operator<< [1/2]

template<typename T, size_t Rank>
auto operator<< ( std::ostream & out,
const Tensor< T, Rank > & tensor ) -> std::ostream& requires(Rank > 1)
friend

◆ operator<< [2/2]

template<typename T, size_t Rank>
auto operator<< ( std::ostream & out,
const Tensor< T, Rank > & tensor ) -> std::ostream& requires(Rank == 1)
friend

The documentation for this class was generated from the following file: