THGrid.c 807 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
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);
9
10
  int64_t posStride0 = THTensor_(stride)(pos, 0);
  int64_t posStride1 = THTensor_(stride)(pos, 1);
rusty1s's avatar
rusty1s committed
11
  int64_t *countData = THLongTensor_data(count);
rusty1s's avatar
rusty1s committed
12
13
14

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

#endif  // TH_GENERIC_FILE