如何加速異常值檢測中使用的“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 = [。]
)
);
在此先感謝您的回复。
馬特
Re:如何加速異常值檢測中使用的“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] =。;
Re:如何加速異常值檢測中使用的“for”循環?這有很大的改進。 謝謝您的幫助。
Re:如何加速異常值檢測中使用的“for”循環?這應該快得多:
q75 =分位數(.75,mBase);
q25 =分位數(.25,mBase);
對於(i = 1,i <2000 + 1,i ++,
如果(mBase > q75 + 3.95 *(q75 - q25)|
MBASE
MBASE = [。]
)
);