Проблема при просмотре данных от 0 до -1 - PullRequest
2 голосов
/ 26 июля 2010

Я пытаюсь написать программу, которая очищает данные, используя Matlab.Эта программа принимает максимальные и минимальные значения, которые могут быть данными, и выбрасывает данные, которые меньше минимального или больше максимального.Похоже, небольшая проблема с чистящей частью.Этот случай имеет место ТОЛЬКО, когда минимальный диапазон проверяемой переменной равен 0. Если это так, то по той или иной причине программа не выбрасывает точки данных, которые находятся между 0 и -1.Я пытался исправить это в течение некоторого времени, и заметил, что это единственный случай, когда это происходит, и если вы попытаетесь выполнить запрос SQL, выбирая данные, которые <0, он пропустит данные между 0 и1, так же, как та же ошибка, что и со мной.Хотите знать, кто-нибудь может узнать это и знать, что это может быть. </p>

Ответы [ 5 ]

4 голосов
/ 26 июля 2010

Я бы написал такую ​​функцию как:

function data = cleanseData(data, limits)
    limits = sort(limits);
    data = data( limits(1) <= data & data <= limits(2) );
end

пример использования:

a = rand(100,1)*10;

b = cleanseData(a, [-2 5]);
c = cleanseData(a, [0 -1]);
4 голосов
/ 26 июля 2010

-1 меньше 0, поэтому 0 должно быть значением max.И если это так, он сохранит точки между -1 и 0 в соответствии с вашим определением операции очистки:

и выбрасывает данные, которые меньше минимального или больше максимального.

Если вы хотите отбросить (используя приведенное выше определение)

точек данных, которые находятся между 0 и -1

, товам нужно установить 0 в качестве значения min и -1 в качестве значения max, что не имеет смысла.

Кроме того, я думаю, что вы имеете в виду

и выбрасывает данные, которые меньше, чем минимум И больше, чем максимум.

1 голос
/ 26 июля 2010

Может случиться так, что числа будут переданы в целые числа перед сравнением.Я не знаю matlab, но в python int (-0.5) == 0, который может объяснить получение дополнительных точек данных. Вы можете проверить это, установив min в -1, если вы также получите значения от -1до -2, тогда вам нужно убедиться, что кастинг не завершен.

0 голосов
/ 26 июля 2010

Я могу представить такую ​​ошибку, если вы сделаете что-то вроде

minimum = 0
if minimum and value < minimum
0 голосов
/ 26 июля 2010

Если я попытаюсь имитировать вашу ситуацию с SQL и выполнить следующий запрос для таблицы данных, имеющей 1.00, 0.00, -0.20, -0.80. -1.00, -1.20 and -2.00 в столбце SomeVal, он правильно вернет -0.20 and -0.80, что соответствует ожиданиям.1005 * То же самое верно для MatLab.Возможно, в вашем коде есть ошибка.Сверните приведенное выше утверждение с вашим собственным оператором SELECT, чтобы увидеть, что-то не так.

...