Matlab を使用して、データを消去するプログラムを作成しようとしています。このプログラムは、データの最大値と最小値を取り、最小値より小さいデータまたは最大値より大きいデータを破棄します。クリーニング部分に小さな問題があるようです。このケースは、チェックされる変数の最小範囲が 0 の場合にのみ発生します。この場合、何らかの理由で、プログラムは 0 と -1 の間のデータ ポイントを破棄しません。しばらくの間、これを修正しようとしてきましたが、これが唯一のケースであることに気付きました。0 未満のデータを選択して SQL クエリを実行しようとすると、0 から - の間のデータが除外されます。 1、事実上、私に起こっていることと同じエラーです。誰かがこれを認識し、それが何であるかを知っているかどうか疑問に思っています.
5 に答える
-1
はより小さい0
ので0
、値である必要がありmax
ます。そして、これが事実である場合、それはクリーニング操作の間の-1
そして0
あなたの定義によるポイントを保ちます:
最小値未満または最大値を超えるデータをスローします。
捨てたい場合(上記の定義を使用)
0から-1の間のデータポイント
0
次に、値として、min
および値として設定する必要があります---これは意味がありません。-1
max
また、私はあなたが意味すると思います
最小値より小さく、最大値よりも大きいデータをスローします。
私は次のような関数を書きます:
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]);
比較の前に float が int にキャストされている可能性があります。私はmatlabを知りませんが、python int(-0.5)==0では、余分なデータポイントが入ってくることを説明できます.-1から値を取得する場合は、minを-1に設定することでこれをテストできます-2 にすると、キャストが行われていないことを確認する必要があります。
SQL であなたの状況を模倣しようとして1.00, 0.00, -0.20, -0.80. -1.00, -1.20 and -2.00
、列 SomeVal にあるデータテーブルに対して次のクエリを実行すると、正しく返されます-0.20 and -0.80
。これは期待どおりです。
SELECT SomeVal
FROM SomeTable
WHERE (SomeVal < 0) AND (SomeVal > - 1)
同じことが MatLab にも当てはまります。コードにエラーがある可能性があります。上記のステートメントを独自の SELECT ステートメントで調べて、何か問題があるかどうかを確認してください。
次のようなことをすると、そのようなバグを想像できます
minimum = 0
if minimum and value < minimum