Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 6
.NET 4.x

Очистка набора данных от ошибочных значений

04.06.2011, 12:05. Показов 1357. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется набор значений, кол-во элементов примерно 1000.
Пример:
[img]http://i22.***********/big/2011/0604/2b/9a887ab352ad0681a1de0ed5fda63b2b.jpg[/img]
[img]http://i22.***********/big/2011/0604/ea/d66dd507a613cc76d70df683e30a11ea.jpg[/img]
В наборе бывают ошибочные значения, на втором скрине видно, значение свыше 4000, явно ошибка.
Ошибки встречаются блоками и не всегда свыше 4000.
Подскажите как можно реализовать "очистку" от ошибок.

Добавлено через 17 минут
C#
1
2
3
4
5
6
int tmp = massiv[0];
            for (int i = 1; i < massiv.Length; i++)
            {
                if (Math.Abs ((massiv[i] - tmp)) > 5) massiv[i] = tmp;
                tmp = massiv[i];
            }
попробовал такой нехитрый способ, но значение по модулю почему то не работает
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.06.2011, 12:05
Ответы с готовыми решениями:

Очистка полей ввода данных и сокрытие группы объектов набора данных
Добавьте в обработчик button2 очистку полей ввода данных и сокрытие группы объектов набора данных, как это сделано в обработчике button3....

Контроль ввода ошибочных значений
Как заставить пользователя вводить данные по определенному шаблону, к примеру дату в формате yyyy.mm.dd ?

Суммирование значений из набора данных
Доброго времени суток, Подскажите, пожалуйста, как можно суммировать значения из набора данных? В последствии сумму необходимо будет...

9
57 / 57 / 1
Регистрация: 19.04.2011
Сообщений: 136
04.06.2011, 12:49
В вашем методе вместо 5 можно взять значение побольше. И нужно быть уверенным, что первый элемент в массиве (точнее нулевой) не ошибочный.
Цитата Сообщение от MUXABIG Посмотреть сообщение
но значение по модулю почему то не работает
В смысле не работает?
1
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 6
04.06.2011, 18:20  [ТС]
Цитата Сообщение от yooll Посмотреть сообщение
В вашем методе вместо 5 можно взять значение побольше. И нужно быть уверенным, что первый элемент в массиве (точнее нулевой) не ошибочный.
В смысле не работает?
Да, про первый неошибочный знаю. А не работает, не заменяет элементы которые явно меньше 5, т.е. если больше то работает, если ниже то пропускает.
А методом исследования было определено что разница значений в районе 5-10.
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
04.06.2011, 18:38
Сначала подсчитать среднее в массиве, и усреднять по двум соседям элементы, выходящие за некие границы, относящиеся к среднему ( я бы сказал, от 0 до 2*ср оставляем)..
0
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 6
04.06.2011, 18:41  [ТС]
Цитата Сообщение от Killster Посмотреть сообщение
Сначала подсчитать среднее в массиве, и усреднять по двум соседям элементы, выходящие за некие границы, относящиеся к среднему ( я бы сказал, от 0 до 2*ср оставляем)..
Ошибки могут идти блоками, например по 20 ошибок подряд
0
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
04.06.2011, 18:52
Цитата Сообщение от MUXABIG Посмотреть сообщение
Ошибки могут идти блоками, например по 20 ошибок подряд
Усредняем по (количество_данных)/10 соседям.

P.S. Есть еще вариант тупо выкидывать эти числа, подставляя в них предыдущуее значение.
0
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 6
04.06.2011, 18:56  [ТС]
Цитата Сообщение от Killster Посмотреть сообщение
выкидывать эти числа, подставляя в них предыдущуее значение
именно так я и пытаюсь их отсеять
0
57 / 57 / 1
Регистрация: 19.04.2011
Сообщений: 136
04.06.2011, 19:25
Цитата Сообщение от MUXABIG Посмотреть сообщение
А не работает, не заменяет элементы которые явно меньше 5, т.е. если больше то работает, если ниже то пропускает.
Почему пропускает? Все должно работать. Тип массива int?
Выложите код полностью. Может, ошибка в другом месте?

Цитата Сообщение от MUXABIG Посмотреть сообщение
А методом исследования было определено что разница значений в районе 5-10.
Если нормальная разница в районе 5-10, то сравнивать нужно, например, с 15.
1
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 6
07.06.2011, 20:19  [ТС]
Цитата Сообщение от yooll Посмотреть сообщение
Почему пропускает? Все должно работать. Тип массива int?
Выложите код полностью. Может, ошибка в другом месте?
массив интовый

об этих переменных говорю глобально:
C#
1
2
3
4
5
6
7
public Form1()
        {
            InitializeComponent();
        }
        int SavedPort;
        int[] massiv = new int[1000];
        long sum = 0;
на кнопку старт:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
            string s;
            string sbuf = null;
            char cLow;
            char cHigh;
            int value;
            int _count = 0;
            long sum = 0;
            
            s = serialPort1.ReadExisting();
            sbuf = sbuf + s;
            while (sbuf.Length < 5000 )
            {
                s = serialPort1.ReadExisting();
                sbuf = sbuf + s;
                progressBar1.Value = sbuf.Length; ///////////////////бар на кол-во элементов
            }
            while (sbuf.Length >= 3 && _count < 1000)
            {
                if ((byte)sbuf[2] == 0x3F)
                {
                    cLow = sbuf[0];
                    cHigh = sbuf[1];
                    sbuf = sbuf.Remove(0, 3);
                    value = (cLow & 0x3F) | ((cHigh & 0x3F) << 6);
                    massiv[_count] = value;
                    _count++;
                }
                else sbuf = sbuf.Remove(0, 1);
            }
            this.serialPort1.Close();
            for (int i = 0; i < massiv.Length; i++)
            {
                sum = sum + massiv[i];
            }
            double srednee = sum / massiv.Length; /////////////////////////////посчёт среднего значения
            label2.Text = Convert.ToString(srednee);
            chart1.Series["Series1"].Points.DataBindY(massiv); //////////////////////////////отрисовка гистограммы
и на другую кнопку удаление ошибок:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 long sum = 0;
            int tmp = massiv[0];
            for (int i = 1; i < massiv.Length; i++)
            {
                if (Math.Abs ((massiv[i] - tmp)) > 5) massiv[i] = tmp; ///////// тут ставим значение разницы
                tmp = massiv[i];
            }
            chart1.Series["Series1"].Points.DataBindY(massiv); /////отрисовка
            for (int i = 0; i < massiv.Length; i++)
            {
                sum = sum + massiv[i];
            }
            double srednee = sum / massiv.Length; ////////////посчёт среднего
            label2.Text = Convert.ToString(srednee);
Добавлено через 10 часов 22 минуты
Ребята, получается такая картина, что используемый мной метод вроде как никак не называется, говорят в разработке ПО так нельзя. Подскажите может мой метод как то называется или есть некие подобные методы?
0
57 / 57 / 1
Регистрация: 19.04.2011
Сообщений: 136
08.06.2011, 09:58
Можно использовать интерполяцию. Есть много разных видов. http://ru.wikipedia.org/wiki/%... 0%B8%D1%8F
То есть, вместо ошибочного значения брать не соседнее, а то, которое даст интеполяция. Для простоты можно взять линейную интерполяцию и заменить ошибочное значение на среднее арифметическое между предидущим и следующим.
Можно взять более сложную модель; это надо исходить из реальных даных, которые обрабатываются.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.06.2011, 09:58
Помогаю со студенческими работами здесь

Выборка ошибочных данных, возможна?
Приветствую. :) Имеется таблица: ----------------------------------------------- ONUM | AMT | ODATE ...

Добавить проверку на ввод ошибочных данных
Пожалуйста, помогите сделать так чтобы при вводе ошибочных данных выходил текст &quot;vveli nekorrektnie dannie&quot;....

Работа с TextBox и датами при ошибочных данных
Есть форма UserForm с кнопкой CommandButton1 и текстовым полем TextBox1. Если кликнуть по кнопке CommandButton1, появлется сообщение об...

Как сложить два набора дискретных значений для вычисления средних значений
Добрый день. Возникла проблема, надо сложить два набора дискретных значений для вычисления средних значений но никак не хочется переводить...

Очистка значений numericupdown
Всем привет...Завис с такой проблемой- КАК очистить значения numeric up down при переключении комбика. :-| есть комбик- в нем 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru