traversing tensor with only one index
second-taco: Is there a way of traversing a tensor with only one index despite it being for example a 2D Tensor?
This would be helpful for writing dimension agnostic code. So instead of
Tensor A({dim1,dim2}) for (int i = 0; i < Tensor.getDimension(0); i++){ for(int j=0; j <Tensor.getDimension(1); j++){ A(i,j) = somevalue();
one could write
counter = 0; for (int i = 0; i < Tensor.getDimension(0); i++){ for(int j=0; j <Tensor.getDimension(1); j++){ A(counter) = somevalue(); counter++
which is easily expandable into more general code
counter = 0; for (int h = 0; h < Tensor.getDimensions.size(); h++){ for (int i = 0; i < Tensor.getDimension(h); i++){ A(counter) = somevalue(); counter++
or similiar in order to also treat other dimensions.
taco actually lets you access tensors using a dynamic vector of index variables, so you can write dimension-agnostic code like below:
vector<int> coords(A.getOrder());
for (int i = 0; i < (int)pow(A.getDimension(0), A.getOrder()); ++i) {
A(coords) = somevalue();
// increment coords
coords[A.getOrder() - 1]++;
for (int k = A.getOrder() - 1; k > 0 && coords[k] == A.getDimension(k); --k) {
coords[k] = 0;
coords[k-1]++;
}
}