2013-06-05 3 views
0

텍스트 파일에서 목록을 읽고이 목록의 표준 편차를 사용하면 표준 편차 밖의 값을 만드는 방법을 알고 싶습니다. 평균으로부터 표준 편차로 사용되는 평균.목록의 값이 특정 값 이상인 경우 목록의 값을 변경하십시오.

a=np.genfromtxt('meanvals2.txt').T[1] 
b=np.std(a) 
c=np.mean(a) 
ok=(a>(c-b))*(a<(c+b)) # within 1st deviation 
h=a[ok] 
print h 

이 코드는 하나의 표준 편차를 벗어난 값을 삭제 : 여기에 내가 함께 일하고 내 코드의 일부이다. 내가 어떻게 그것을 바꿀 것인가 삭제 된 값은 평균으로부터 1 표준 편차를 벗어나지 만 데이터 세트에서 유지됩니까?

예를 들어 내 목록이 [1,2,3,4,5,20] 인 경우 표준 편차는 7.08이고 평균은 5.88입니다. 그래서 평균에서 벗어난 한 표준 편차는 12.96 또는 -1.2입니다. 따라서 현재의 코드는 목록을 [1,2,3,4,5]가되도록 모든 숫자를 배제 할 것이지만 목록을 실제로 읽으려고합니다 [ 1,2,3,4,5,12.96]. 물론

a = np.genfromtxt('meanvals2.txt').T[1] 
b = np.std(a) 
c = np.mean(a) 

#step 1, values lower than 1 std from mean 
ok = a > (c - b) 
a[~ok] = c - b 

#step 2, values higher than 1 std from mean 
ok = a < (c + b) 
a[~ok] = c + b 

print a 

당신이 정말로 별도의 배열 h을 원한다면, 당신은 h = a.copy()을 다음 a 대신 h와 함께 일할 수 :이

+0

. h는 무엇입니까? –

+0

죄송합니다, 지금 편집 한 줄을 놓쳐서 죄송합니다. 내 코드는 몇 백 줄에 걸쳐서 정말 포함하고 싶습니다. 필자도 충분히 포함하고 싶습니다. – astrochris

+0

그래서 h는 새로운 출력 목록입니다. – astrochris

답변

2

가 나는 두 단계에서이 작업을 수행 할 것이라고 생각 할 것입니다 방법 .

예를 들어 데이터를 사용 : 코드의 더 완전한 버전 도움이 될

>>> a = np.array([1,2,3,4,5,20],dtype=np.float32) 
>>> b = np.std(a) 
>>> c = np.mean(a) 
>>> print b 
6.46572151487 
>>> print c 
5.83333333333 
>>> ok = a > (c - b) 
>>> a[~ok] = c - b 
>>> ok = a < (c + b) 
>>> a[~ok] = c + b 
>>> print a 
[ 1.   2.   3.   4.   5.   12.2990551] 
+0

@ user2201043 - 나는 내 코드가 당신이 요구하는 것을해야한다는 것을 확신합니다 ... – mgilson

+0

예 그것은 내 나쁜 짓입니다, 고마워요. – astrochris