Tensor class with arbitrary dimensions. More...
#include <tensor.h>
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.
The type vec_t can be any vector type with operator[], size() and resize() methods. The type vec_size_t can be any integer-like vector type with operator[], size() and resize() methods.
For I/O with tensors, see o2scl_hdf::hdf_file::setd_ten() and o2scl_hdf::hdf_file::getd_ten() . See also the discussion in the sections Tensors and I/O and contiguous storage of the user's guide.
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 elements
and
are adjacent.
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... | |
Method to check for valid object | |
| void | is_valid () const |
| Check that the o2scl::tensor object is valid. | |
Copy constructors | |
| tensor (const tensor< data_t, vec_t, vec_size_t > &t) | |
Copy using operator() | |
| tensor< data_t, vec_t, vec_size_t > & | operator= (const tensor< data_t, vec_t, vec_size_t > &t) |
Copy using operator=() | |
Clear method | |
| void | clear () |
| Clear the tensor of all data and free allocated memory. | |
Set functions | |
| template<class size_vec_t > | |
| void | set (const size_vec_t &index, data_t val) |
Set the element indexed by index to value val. | |
| void | set_all (data_t x) |
| Set all elements in a tensor to some fixed value. | |
| void | swap_data (vec_t &dat) |
| Swap the data vector. | |
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 & | 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_index (size_t ix, size_vec_t &index) |
| Unpack the single vector index into indices. | |
Minimum, maximum, and sum | |
| data_t | min_value () |
| Compute the minimum value in the tensor. | |
| void | min_index (vec_size_t &index) |
| Compute the index of the minimum value in the tensor. | |
| void | min (vec_size_t &index, data_t &val) |
| Compute the index of the minimum value in the tensor and return the minimum. | |
| data_t | max_value () |
| Compute the maximum value in the tensor. | |
| void | max_index (vec_size_t &index) |
| Compute the index of the maximum value in the tensor. | |
| void | max (vec_size_t &index, data_t &val) |
| Compute the index and value of the maximum value in the tensor and return the maximum. | |
| void | minmax_value (data_t &min, data_t &max) |
| Compute the minimum and maximum values in the tensor. | |
| void | minmax_index (vec_size_t &index_min, vec_size_t &index_max) |
| Compute the indices of the minimum and maximum values in the tensor. | |
| void | minmax (vec_size_t &index, size_t &index_min, data_t &min, size_t &index_max, data_t &max) |
| Compute the indices and values of the maximum and minimum in the tensor. | |
| double | total_sum () const |
| Return the sum over every element in the tensor. | |
Slicing and converting to table3d objects | |
| void | convert_table3d_sum (size_t ix_x, size_t ix_y, table3d &tab, std::string x_name="x", std::string y_name="y", std::string slice_name="z") |
| Convert to a o2scl::table3d object by summing over all but two indices. | |
| tensor< data_t > | rearrange_and_copy (std::vector< index_spec > spec, int verbose=0, bool err_on_fail=true) |
| Rearrange, sum and copy current tensor to a new tensor. More... | |
Protected Attributes | |
| vec_t | data |
| The data. | |
| vec_size_t | size |
| A rank-sized vector of the sizes of each dimension. | |
| size_t | rk |
| Rank. | |
Get functions | |
| typedef boost::numeric::ublas::vector_slice< boost::numeric::ublas::vector< data_t > > | ubvector_slice |
| typedef boost::numeric::ublas::slice | slice |
| template<class size_vec_t > | |
| data_t & | get (const size_vec_t &index) |
Get the element indexed by index. | |
| template<class size_vec_t > | |
| const data_t & | get (const size_vec_t &index) const |
Get a const reference to the element indexed by index. | |
|
inline |
|
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).