THGrid.c 832 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
void THTensor_(grid)(THLongTensor *self, THTensor *pos, THTensor *size,
                     THLongTensor *count) {
rusty1s's avatar
rusty1s committed
7
8
9
  int64_t *selfData = THLongTensor_data(self);
  real *posData = THTensor_(data)(pos);
  real *sizeData = THTensor_(data)(size);
10
11
  int64_t posStride0 = THTensor_(stride)(pos, 0);
  int64_t posStride1 = THTensor_(stride)(pos, 1);
rusty1s's avatar
rusty1s committed
12
  int64_t *countData = THLongTensor_data(count);
rusty1s's avatar
rusty1s committed
13

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

rusty1s's avatar
rusty1s committed
28
#endif // TH_GENERIC_FILE