56 Shape(std::vector<std::size_t> dims) : _rank{dims.size()}, _dims{dims}, _ldims(dims.size(), 0), _size{1} {
57 enable_dynamic =
false;
62 Shape(std::vector<std::size_t*> dims_ptr)
63 : _rank{dims_ptr.size()},
65 _dims(_dims_ptr.size(), 0),
66 _ldims(_dims_ptr.size(), 0),
68 enable_dynamic =
true;
73 if (enable_dynamic) update();
79 if (enable_dynamic) update();
85 inline std::vector<std::size_t>&
dims() {
86 if (enable_dynamic) update();
92 enable_dynamic =
false;
98 for (
auto& i : _dims) ss << i <<
",";
106 for (
int i = 0; i < _rank; ++i) {
107 _dims[i] = *(_dims_ptr[i]);
108 assert(_dims[i] > 0);
110 _ldims[_rank - 1] = 1;
111 _size = _dims[_rank - 1];
112 for (
int i = _rank - 2; i >= 0; --i) {
113 _ldims[i] = _ldims[i + 1] * (_dims[i + 1]);
118 bool enable_dynamic =
false;
Shape class provide information about of a Tensor's shape.
std::vector< std::size_t > & dims()
std::vector< std::size_t * > _dims_ptr
pointers to dimensions for each rank
int rank()
get data size described by a Shape
Shape(std::vector< std::size_t * > dims_ptr)
get rank of a Shape
std::size_t _rank
rank of the shape
std::vector< std::size_t > _dims
dimensions for each rank
Shape(std::vector< std::size_t > dims)
construct from a vector of std::size_t pointer (dynamic shape)
std::vector< std::size_t > _ldims
leading dimensions
std::size_t _size
size of data
Shape(std::size_t size)
< construct from a number (rank-1 Shape)
< http://warp.povusers.org/FunctionParser/fparser.html
std::vector< std::size_t > Basic_Shape