0

テキストファイルからリストを読み込んで、このリストの標準偏差を取得しています。平均から1標準偏差離れた値を、平均から1標準偏差として使用する方法を知りたいです。ここに私が取り組んでいる私のコードの一部があります:

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 標準偏差に制限されているが、データ セットに保持されるように変更するにはどうすればよいですか?

たとえば、リストが [1,2,3,4,5,20] の場合、標準偏差は 7.08、平均は 5.88 です。したがって、平均から離れた1つの標準偏差は12.96または-1.2であるため、現在の私のコードはこれ以外の数値を除外するため、リストは[1,2,3,4,5]になりますが、リストを実際に読み取りたい[ 1,2,3,4,5,12.96]。どうすればいいですか

4

1 に答える 1

2

私はこれを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()ha

例としてデータを使用します。

>>> 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]
于 2013-06-05T16:07:49.023 に答える