THGrid.c 715 Bytes
Newer Older
rusty1s's avatar
rusty1s committed
1
2
3
4
#ifndef TH_GENERIC_FILE
#define TH_GENERIC_FILE "generic/THGrid.c"
#else

rusty1s's avatar
rusty1s committed
5
6
7
8
9
void THTensor_(grid)(THLongTensor *self, THTensor *pos, THTensor *size, THLongTensor *count) {
  int64_t *selfData = THLongTensor_data(self);
  real *posData = THTensor_(data)(pos);
  real *sizeData = THTensor_(data)(size);
  int64_t *countData = THLongTensor_data(count);
rusty1s's avatar
rusty1s committed
10
11
12

  ptrdiff_t n, d; int64_t coef, value;
  for (n = 0; n < THTensor_(size)(pos, 0); n++) {
rusty1s's avatar
rusty1s committed
13
    coef = 1; value = 0;
rusty1s's avatar
rusty1s committed
14
    for (d = 0; d < THTensor_(size)(pos, 1); d++) {
rusty1s's avatar
rusty1s committed
15
      value += coef * (int64_t) (posData[d * pos->stride[1]] / sizeData[d]);
rusty1s's avatar
rusty1s committed
16
17
      coef *= countData[d];
    }
rusty1s's avatar
rusty1s committed
18
    posData += pos->stride[0];
rusty1s's avatar
rusty1s committed
19
    selfData[n] = value;
rusty1s's avatar
rusty1s committed
20
  }
rusty1s's avatar
rusty1s committed
21
22
23
}

#endif  // TH_GENERIC_FILE