taco icon indicating copy to clipboard operation
taco copied to clipboard

traversing tensor with only one index

Open DJDDDM opened this issue 6 years ago • 1 comments

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.

DJDDDM avatar Jun 25 '19 08:06 DJDDDM

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]++;
  }
}

stephenchouca avatar Aug 11 '19 18:08 stephenchouca