이상치 검출에 사용되는 "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 > Quantile (0.75, mBase) + 3.95 * (Quantile (0.75, mBase) -
Quantile (0.25, mBase)) | mBase
Quantile (0.75, mBase) - Quantile (0.25, mBase)),
mBase = [.]
)
);
회신에 미리 감사드립니다.
매트
Re : 어떻게 이상한 검색에 사용되는 "에 대한"루프 속도를?더 빨리 : 매트릭스 전체를 한 번에 조작하고 루프를 완전히 피하십시오.
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 : 어떻게 이상한 검색에 사용되는 "에 대한"루프 속도를?이것은 많이 향상되었습니다. 도와 주셔서 감사합니다.
Re : 어떻게 이상한 검색에 사용되는 "에 대한"루프 속도를?이것은 훨씬 빨라야합니다 :
q75 = quantile (.75, mBase);
q25 = quantile (.25, mBase);
(i = 1, i <2000 + 1, i ++,
만약 (m베이스 > q75 + 3.95 * (q75 - q25) |
mBase
mBase = [.]
)
);