2013-08-27 3 views
0

Я не уверен, что SO - это подходящее место для запроса, если это не так, я удалю вопрос и попробую его в другом месте. Говорит, что я пытаюсь сделать следующее:Замените значения, расположенные близко друг к другу со средним значением

enter image description here

У меня есть List<double> и хочу заменить блок значений, значение которых расположены очень близко (скажем, 0,75 в этом примере) для одного значения, представляя среднее значение замененных значений. Нельзя изменять значения, которые являются изолированными или отдельными. Также замененный блок не может быть больше 5.

Вычисление среднего значения для каждого интервала от 0, 5, 10 .. не обеспечило ожидаемых результатов.

Это случалось много раз, что сила LINQ с удивлением поразила меня, и я был бы счастлив, если бы кто-нибудь мог вести меня в создании этого небольшого метода.

То, что я думал, чтобы сначала найти самые близкие значения для каждого из них, вычислить расстояние, если расстояние меньше минимального (0,75 в этом примере), затем присвойте эти значения одному и тому же блоку.

Когда все значения назначены их блокам, запускается второй цикл, который заменяет каждый блок (с одним значением или многими значениями) до его среднего значения.

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

EDIT: ожидаемый результат: enter image description here

Хотя вы видите две оси используется только один, список 1D, я нарисовал только ось X.

Длина строк, которые представлены, не имеет значения. Это просто отметить на оси, где находится значение.

+0

Я страдаю от немного информационной перегрузки здесь. Было бы правильно сказать, что вы спрашиваете, как удалить элементы в 'List ', которые находятся в пределах .75 от заданного значения? Если нет, можете ли вы представить пример своего списка до и после? –

+0

Простите, но не совсем. Данное значение не предоставляется, и это не просто удалить значения, но и заменить их их средним значением. Также существует ограничение длины интервала замененных значений. – Sturm

+0

Hrrm, мне нужно будет увидеть пример вашего списка до и после обработки, чтобы дать точный ответ. –

ответ

0

Оказывается, что MSDN уже сделал это, и при условии, пример приложения, в углубленном с кодом:

Data Clustering - Detecting Abnormal Data Using k-Means Clustering

+0

Представленная проблема не является примером проблемы k -средства. По крайней мере, мы не знаем 'k' априори. – BartoszKP

Смежные вопросы