2017-03-19 1 views
2

여행 시간 중 매우 큰 목록 (~ 1GB)으로 작업하고 평균을하려고하지만 여행이 불가능할 경우 값이로 설정되어 있습니다. 가능한 가장 높은 정수 값으로, 전체 계산을 파괴합니다. 여행 시간은 목록에 저장되고 목록은 사전에 있습니다.매우 큰 목록의 특정 값을 제외 평균 평균

{'AB':[3,5,10],'BC':[2,3,5,10,2147483647]} 

AB 사이의 평균 6이어야하며 BC 5 (되지 429496733.4) 같아야 같이 C에 B 및 B 지점까지

보일 것이다.

평균 계산에서 불량 값을 제외하려면 어떻게해야합니까?

+1

큰 목록, NumPy와 배열을 사용하는 것이 좋습니다. 마스크 된 배열로 바꾸고 한계 값을 마스크 한 다음'np.nanmean'을 사용하면된다. 또는 평균 대신 중간 값을 계산하십시오 (마디 값 포함 또는 제외). – Evert

답변

2

statistics 모듈은 입력으로 반복자를 취할 수 mean() 기능을 제공합니다, 그래서 당신은 당신이 버려야 할 값을 필터링하는 목록의 복사본을 만들 필요가 없습니다. 여기

는 1 개 백만 요소의 90 % 범위에서 1-9이 포함됩니다 데이터의 조롱 예, 그리고 10 %는 악성 값은 다음과 같습니다

다음
from random import randint, random 

data = [randint(1, 9) if random() < 0.9 else 2147483647 for _ in range(1000000)] 

방법 statistics.mean()를 사용하는 것 불량 값을 포함하여 평균 얻을 : 여기

>>> from statistics import mean 

>>> mean(data) 
215405499.193486 

을 ... 그리고 것은 그 위에 제외 불량 값을 반복 이렇게하는 방법은 다음과 같습니다

>>> mean(x for x in data if x != 2147483647) 
4.998926301609214 

은 사전 이해에 그를 포장 :

>>> travel_times = {'AB':[3,5,10],'BC':[2,3,5,10,2147483647]} 
>>> {k: mean(x for x in v if x != 2147483647) for k, v in travel_times.items()} 
{'BC': 5, 'AB': 6} 
+1

대단히 감사합니다! – Notabrick