Организация вывода путем сравнения с входными данными - PullRequest
0 голосов
/ 02 июля 2018

У меня есть два набора данных, как показано ниже:

set1: 57.5276 55.3756 24.2798 54.5989

и

set2: 55.1118 55.004 24.824 57.1398

Теперь я хочу расположить второй набор так, чтобы он соответствовал ближайшему первому набору (я имею в виду 57.1398 55.1118 24.824 55.004 в этом порядке). Как я могу сделать это в C ++.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Соответствие «ближайший» должно быть указано немного лучше. Это могут быть, например, «минимальная квадратичная ошибка», «минимальная абсолютная ошибка», «максимальная корреляция», которые все дают разные результаты.

В зависимости от того, что подразумевается под «ближайшим», вам, возможно, придется пройти через все перестановки множества set2, что будет дорого. Если вы хотите использовать решение «сортировать оба набора», то возможный способ добиться этого в c ++ при сохранении порядка первого набора - создать вектор индексов в set1 и отсортировать его по значениям в set1 *. 1003 *

std::vector<double> set1{{57.5276,55.3756,24.2798,54.5989}};
std::vector<size_t> set1index(set1.size());
std::iota(set1index.begin(), set1index.end(), 0);
std::sort(set1index.begin(), set1index.end(), [&](size_t a, size_t b){return set1[a] < set1[b];});

Затем вы можете отсортировать set2 и использовать индексы для воссоздания порядка set1 со значениями set2.

0 голосов
/ 02 июля 2018

Расположите второй набор так, чтобы он был упорядочен так же, как и первый набор.

Более конкретно, первый набор идет от наибольшего числа (57.5276) ко второму наибольшему числу (55.3756), от четвертого наибольшего к третьему наибольшему.

Расставьте второй сет таким же образом. Величайший (57.1398), второй по величине (55.004), четвертый по величине (24.824), третий по величине (57.1398) в этом порядке. Это минимизирует среднюю разницу между предметами одного индекса.

Программно простым способом реализации этого было бы отсортировать оба набора, затем найти отсортированный индекс каждого числа в первом наборе и расположить второй набор в том же порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...