あるとき、統計分析のため、
重みに応じたリサンプリングをする必要ができました。
floatのベクトルvがあったとすると
p=v/sum(v)
を確率ベクトルとして、復元抽出するコードを考えてみました。
探しては見たのですが、すぐには見つかりませんでした。
そこで、したのような処理で実現してみました。
import numpy as np
n = 100
def resamp( v, n ):
vsum = np.sum(v)
vcum = np.cumsum(v)
indices = np.array([ np.argmax(1.0/(vcum - r)) for r in np.random.uniform(0,vsum,n) ])
return indices
確率ベクトルvと出力サンプル数nを入力し、インデックスのnumpy.arrayを返す関数です。
備忘録のため、ブログに載せてみましたが、
関数一つでできる方法がないのだろうか。
0 件のコメント:
コメントを投稿