Регистрация | Вход
double* parsen(dataset inputs, dataset outputs, int k, double kernel(double), double vector[]){ distvect* dvarr = malloc(inputs.length * sizeof(distvect)); for (int i = 0; i < inputs.length; ++i) { double dist = 0; for (int j = 0; j < inputs.dimentions; ++j) dist += pow(vector[j] - inputs.data[i][j], 2); distvect dv = { dist, outputs.data[i] }; dvarr[i] = dv; } qsort(dvarr, inputs.length, sizeof(distvect), distvectcomp); double *res = calloc(outputs.dimentions, sizeof(double)); double W = 0; for (int i = 0; i < k; ++i) { if (dvarr[i].dist == 0) continue; double w = kernel(dvarr[i].dist); W += w; for (int d = 0; d < outputs.dimentions; ++d) res[d] += dvarr[i].vector[d] * w; } for (int d = 0; d < outputs.dimentions; ++d) res[d] /= W; free(dvarr); return res;}