異常値検出で使用されるforループを高速化する方法<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />データセットから外れ値を検出して削除するには、次の "for"ループを使用します。 列をマトリックス(mBase)としてインポートすると、他の問題が解決され、ループを介して実行されます。 誰かがこれをスピードアップするために何かアドバイスがありますか?現在2000レコードは3-4秒かかり、私は60,000レコードを扱っています。
(i = 1、i <2000 + 1、i ++、
もし(
mBase >分位数(0.75、mBase)+ 3.95 *(分位数(0.75、mBase) -
分位数(0.25、mBase))| mBase <分位数(0.25、mBase) - 3.95 *(
分位数(0.75、mBase) - 分位数(0.25、mBase))、
mBase = [。]
)
;
返信いただきありがとうございます。
マット
再:どのように異常値検出で使われる「for」ループをスピードアップするには?さらに速く:一度にマトリックス全体を操作して、ループを完全に避けます。
mBase = mBase:/((q25−3.95 *(q75 − q25))≦mBase≦(q75 + 3.95 *(q75 − q25)))。
:/は要素ごとの行列分割です。例えば、[10 21]:/ [5 3] == [2 7]
上記のコードは、0で除算すると欠損値が生成されるという事実を利用しています。より一般的でやや遅い方法は、Loc()関数を使用することです。
locs = Loc(!((q25 - 3.95 *(q75 - q25))<= mBase <=(q75 + 3.95 *(q75 - q25))));
mBase [locs] =。;
再:どのように異常値検出で使われる「for」ループをスピードアップするには?これはかなり改善されています。 助けてくれてありがとう。
再:どのように異常値検出で使われる「for」ループをスピードアップするには?これはずっと速いはずです:
q 75 =分位数(0.75、mBase)。
q25 =分位数(0.25、mBase)。
(i = 1、i <2000 + 1、i ++、
If(mBase > q 75 + 3.95 *(q 75 −q 25)|
mBase
mBase = [。]
)
;