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

rusty1s's avatar
rusty1s committed
5
6
7
void cluster_(grid)(int C, THLongTensor *output, THTensor *position, THTensor *size, THLongTensor *count) {
  real *size_data = size->storage->data + size->storageOffset;
  int64_t *count_data = count->storage->data + count->storageOffset;
rusty1s's avatar
rusty1s committed
8
9
10
11
  int64_t D, d, i, c, tmp;
  D = THTensor_(nDimension)(position);
  d = THTensor_(size)(position, D - 1);
  TH_TENSOR_DIM_APPLY2(int64_t, output, real, position, D - 1,
rusty1s's avatar
rusty1s committed
12
13
14
    tmp = C; c = 0;
    for (i = 0; i < d; i++) {
      tmp = tmp / *(count_data + i);
rusty1s's avatar
rusty1s committed
15
      c += tmp * (int64_t) (*(position_data + i * position_stride) / *(size_data + i));
rusty1s's avatar
rusty1s committed
16
17
18
    }
    output_data[0] = c;
  )
rusty1s's avatar
rusty1s committed
19
20
21
}

#endif