Tensor class with arbitrary dimensions. More...
The elements of a tensor are typically specified as a list of size_t
numbers with length equal to the tensor rank. For a rank-4 tensor named t
, the element t[1][2][0][3]
can be obtained with something similar to
Empty tensors have zero rank.
Slices of tensors are subsets obtained from fixing the index of several dimensions, while letting other dimensions vary. For a slice with one dimension not fixed, see vector_slice().
For I/O with tensors, see o2scl_hdf::hdf_file::setd_ten() and o2scl_hdf::hdf_file::getd_ten() .
The storage pattern is a generalization of row-major order. In the case of a 4-rank tensor, the location of a generic element is
In this case the distance between two elements and
is
,the distance between two elements
and
is
, and the distance between two elements
and
is just unity.
value_t
.#include <tensor.h>
Public Types | |
typedef boost::numeric::ublas::vector_slice < boost::numeric::ublas::vector < double > > | ubvector_slice |
typedef boost::numeric::ublas::slice | slice |
Public Member Functions | |
tensor () | |
Create an empty tensor with zero rank. | |
template<class size_vec_t > | |
tensor (size_t rank, const size_vec_t &dim) | |
Create a tensor of rank rank with sizes given in dim . More... | |
Set functions | |
template<class size_vec_t > | |
void | set (const size_vec_t &index, double val) |
Set the element indexed by index to value val . | |
void | set_all (double x) |
Set all elements in a tensor to some fixed value. | |
Get functions | |
template<class size_vec_t > | |
double & | get (const size_vec_t &index) |
Get the element indexed by index . | |
template<class size_vec_t > | |
double const & | get (const size_vec_t &index) const |
Get a const reference to the element indexed by index . | |
Slice function | |
template<class size_vec_t > | |
ubvector_slice | vector_slice (size_t ix, const size_vec_t &index) |
Fix all but one index to create a vector. More... | |
Resize method | |
template<class size_vec_t > | |
void | resize (size_t rank, const size_vec_t &dim) |
Resize the tensor to rank rank with sizes given in dim . More... | |
Size functions | |
size_t | get_rank () const |
Return the rank of the tensor. | |
size_t | get_size (size_t i) const |
Returns the size of the ith index. | |
const vec_size_t_int & | get_size_arr () const |
Return the full vector of sizes. | |
const vec_t & | get_data () const |
Return the full data vector. | |
size_t | total_size () const |
Returns the size of the tensor (the product of the sizes over every index) | |
Index manipulation | |
template<class size_vec_t > | |
size_t | pack_indices (const size_vec_t &index) |
Pack the indices into a single vector index. | |
template<class size_vec_t > | |
void | unpack_indices (size_t ix, size_vec_t &index) |
Unpack the single vector index into indices. | |
Protected Attributes | |
vec_t | data |
The data. | |
vec_size_t_int | size |
A rank-sized vector of the sizes of each dimension. | |
size_t | rk |
Rank. | |
|
inline |
|
inline |
|
inline |
This fixes all of the indices to the values given in index
except for the index number ix
, and returns the corresponding vector, whose length is equal to the size of the tensor in that index. The value index[ix]
is ignored.
For example, for a rank 3 tensor allocated with
the following code
Gives a vector v
of length 4 which refers to the values t(1,0,3)
, t(1,1,3)
, t(1,2,3)
, and t(1,3,3)
.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).
Hosted at
.