-1

次の方法で値が分散されているnumpy配列があります

ここに画像の説明を入力

この配列から、正規分布するランダムなサブサンプルを取得する必要があります。

ここに画像の説明を入力

写真の赤い線の上にある配列から値を取り除く必要があります。つまり、突然のピークが削除されたときに分布が滑らかになるように、配列から特定の値の出現を取り除く必要があります。

そして、私の配列の分布は次のようになります。 ここに画像の説明を入力

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

4

1 に答える 1

0

次の種類の作品は、かなり積極的ですが、 ここに画像の説明を入力

これは、サンプルを並べ替え、均一に変換してから、通常のグリッド サブサンプルを選択しようとすることで機能します。攻撃的すぎると感じた場合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)
于 2017-12-08T07:02:55.887 に答える