2017-12-08 9 views
-1

でnumpyの配列からサブサンプリングを分散します通常配布されます。は、私は、その値が次のよう</p> <p><a href="https://i.stack.imgur.com/FHjcg.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FHjcg.jpg" alt="enter image description here"></a></p> <p>で配布され、この配列から、私はランダムサブサンプルを取得する必要がありnumpyの配列を持っているのpython

enter image description here

私は写真の赤い線の上にある配列から値を取り除く必要があります。すなわち、突然のピークが取り除かれたときに私の分布が平滑化されるように、アレイから特定の値のいくつかの発生を取り除く必要がある。

そして、私の配列の分布は次のようになるはずです。 enter image description here

は、手動でピークに対応するエントリを探して、そのうちのいくつかの出現箇所を削除せずに、Pythonでこれを達成することはできますか?これは簡単な方法で行うことができますか?

+0

あなたのビンのサイズを増やしますか?あなたのビンサイズがあなたの分散に合っていない場合、あなたのディストリビューションはいつも尖って見えます。 –

+0

また、ディストリビューションに合わせてサンプルをプルーニングすることは、どんな分野でもひどい練習です。 –

答えて

0

作品の以下のようなもの、それはしかし、むしろ積極的である: enter image description here

それは、サンプルを注文均一に変換し、その後、通常のgriddishのサブサンプルを選択しようとすることで動作します。あまりにも積極的であると感じる場合は、本質的に保管されているサンプル数であるnsを増やすことができます。

また、実際の配信に関する知識が必要です。正規分布の場合、標本平均と偏りのない分散推定(n-1を持つもの)を使用すると問題はありません。

コード(作図なし):

import scipy.stats as ss 
import numpy as np 

a = ss.norm.rvs(size=1000) 
b = ss.uniform.rvs(size=1000)<0.4 
a[b] += 0.1*np.sin(10*a[b]) 

def smooth(a, gran=25): 
    o = np.argsort(a) 
    s = ss.norm.cdf(a[o]) 
    ns = int(gran/np.max(s[gran:] - s[:-gran])) 
    grid, dp = np.linspace(0, 1, ns, endpoint=False, retstep=True) 
    grid += dp/2 
    idx = np.searchsorted(s, grid) 
    c = np.flatnonzero(idx[1:] <= idx[:-1]) 
    while c.size > 0: 
     idx[c+1] = idx[c] + 1 
     c = np.flatnonzero(idx[1:] <= idx[:-1]) 
    idx = idx[:np.searchsorted(idx, len(a))] 
    return o[idx] 


ap = a[smooth(a)] 
c, b = np.histogram(a, 40) 
cp, _ = np.histogram(ap, b) 
関連する問題

 関連する問題