2013-06-05 46 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。我會怎麼做這

+0

你的代碼更完整的版本可能會有所幫助。什麼是h? –

+0

對不起,我錯過了一行,現在編輯了它,我的代碼長達幾百行,所以我並不想真正包括它,但我希望其中包含了足夠的內容 – astrochris

+0

因此h是新的輸出列表 – astrochris

回答

2

我想我會做這兩個步驟:

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(),然後用h工作的a代替。

使用您的數據爲例:

>>> 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 - I我敢肯定,我的代碼應該做你要求的... – mgilson

+0

是的,它是我的不好,謝謝 – astrochris

相關問題