2

Matlab を使用して、データを消去するプログラムを作成しようとしています。このプログラムは、データの最大値と最小値を取り、最小値より小さいデータまたは最大値より大きいデータを破棄します。クリーニング部分に小さな問題があるようです。このケースは、チェックされる変数の最小範囲が 0 の場合にのみ発生します。この場合、何らかの理由で、プログラムは 0 と -1 の間のデータ ポイントを破棄しません。しばらくの間、これを修正しようとしてきましたが、これが唯一のケースであることに気付きました。0 未満のデータを選択して SQL クエリを実行しようとすると、0 から - の間のデータが除外されます。 1、事実上、私に起こっていることと同じエラーです。誰かがこれを認識し、それが何であるかを知っているかどうか疑問に思っています.

4

5 に答える 5

4

-1はより小さい0ので0、値である必要がありmaxます。そして、これが事実である場合、それはクリーニング操作の間の-1そして0あなたの定義によるポイントを保ちます:

最小値未満または最大値を超えるデータをスローします。

捨てたい場合(上記の定義を使用)

0から-1の間のデータポイント

0次に、値として、minおよび値として設定する必要があります---これは意味がありません。-1max

また、私はあなたが意味すると思います

最小値より小さく、最大値よりも大きいデータをスローします。

于 2010-07-26T17:18:17.943 に答える
4

私は次のような関数を書きます:

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]);
于 2010-07-26T19:09:26.267 に答える
1

比較の前に float が int にキャストされている可能性があります。私はmatlabを知りませんが、python int(-0.5)==0では、余分なデータポイントが入ってくることを説明できます.-1から値を取得する場合は、minを-1に設定することでこれをテストできます-2 にすると、キャストが行われていないことを確認する必要があります。

于 2010-07-26T17:40:51.637 に答える
0

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 ステートメントで調べて、何か問題があるかどうかを確認してください。

于 2010-07-26T17:22:38.150 に答える
0

次のようなことをすると、そのようなバグを想像できます

minimum = 0
if minimum and value < minimum
于 2010-07-26T17:26:00.317 に答える