anapt
7 years ago
1 changed files with 51 additions and 0 deletions
@ -0,0 +1,51 @@ |
|||||
|
void iteration (int number_of_iterations, int NUMBER_OF_POINTS, int DIMENSIONS, int h){ |
||||
|
|
||||
|
for (int iter=0; iter < number_of_iterations; iter++){ |
||||
|
double accum =0; |
||||
|
for (int i =0; i< NUMBER_OF_POINTS; i++){ |
||||
|
for (int j=0; j< NUMBER_OF_POINTS; j++){ |
||||
|
//calculate distance between vectors x, y
|
||||
|
double sum=0; |
||||
|
double dif; |
||||
|
for (int k=0; k < DIMENSIONS; k++){ |
||||
|
// TODO CHANGE NAMES
|
||||
|
dif = y[k]-x[k]; |
||||
|
sum += dif*dif; |
||||
|
} |
||||
|
double distance = sqrt(sum); |
||||
|
// 2 sparse array
|
||||
|
if (distance < h){ |
||||
|
kernel_matrix[i][j] = dist; |
||||
|
}else{ |
||||
|
kernel_matrix[i][j] = 0; |
||||
|
} |
||||
|
if (kernel_matrix[i][j]!=0){ |
||||
|
kernel_matrix[i][j] = kernel_matrix[i][j]*kernel_matrix[i][j]; |
||||
|
double pow = ((-1)*(kernel_matrix[i][j]))/(2*(h*h)); |
||||
|
kernel_matrix[i][j] = exp(pow); |
||||
|
} |
||||
|
if (i==j){ |
||||
|
kernel_matrix[i][j] = kernel_matrix[i][j] +1; |
||||
|
} |
||||
|
accum = accum + kernel_matrix[i][j]; |
||||
|
} |
||||
|
denominator[i] = accum; |
||||
|
|
||||
|
for (int j =0; j < DIMENSIONS;j++){ |
||||
|
new_shift[i][j]=0; |
||||
|
for (int k=0; k<NUMBER_OF_POINTS; k++){ |
||||
|
new_shift[i][j] += kernel_matrix[i][k] * original_points[k][j]; |
||||
|
} |
||||
|
new_shift[i][j] = new_shift[i][j] / denominator[i]; |
||||
|
mean_shift_vector[i][j] = new_shift[i][j] - (*shifted_points)[i][j]; |
||||
|
} |
||||
|
} |
||||
|
// frees previously shifted points, they're now garbage
|
||||
|
free((*shifted_points)[0]); |
||||
|
// updates shifted points pointer to the new array address
|
||||
|
shifted_points = &new_shift; |
||||
|
|
||||
|
|
||||
|
}// iteration end
|
||||
|
|
||||
|
} |
Loading…
Reference in new issue