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

rusty1s's avatar
fixes  
rusty1s committed
5
void cluster_(grid)(int C, THLongTensor *output, THTensor *position, THTensor *size, THLongTensor *count) {
rusty1s's avatar
rusty1s committed
6
  real *size_data = size->storage->data + size->storageOffset;
7
  int64_t *count_data = count->storage->data + count->storageOffset;
rusty1s's avatar
rusty1s committed
8
9
10

  int64_t D = THLongTensor_nElement(count), d, c, tmp;
  TH_TENSOR_DIM_APPLY2(int64_t, output, real, position, THTensor_(nDimension)(position) - 1,
11
    tmp = C; c = 0;
rusty1s's avatar
rusty1s committed
12
13
14
    for (d = 0; d < D; d++) {
      tmp = tmp / *(count_data + d);
      c += tmp * (int64_t) (*(position_data + d * position_stride) / *(size_data + d));
rusty1s's avatar
rusty1s committed
15
    }
16
    output_data[0] = c;
rusty1s's avatar
rusty1s committed
17
  )
rusty1s's avatar
rusty1s committed
18
19
20
}

#endif