2017-02-02 3 views
0

Zipfの配布に続いてpythonを使ってリストから要素を1つ選択できますか?PythonでZipfのような選択を使ってリストから要素を選択

は、私がリストを持っていると仮定します。

objlist = ['Here', 'in', 'the', 'wall', 'why'] 

はこれまでのところ、私はhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.random.zipf.html を見てきましたが、私は解決策を把握することはできません。

ありがとうございます。

+0

英語のこれらの単語の実際の頻度を意味しますか? –

+0

はい。私はzipfsの分布に従って要素を選択したい。あなたの質問を理解したら – Antonis

答えて

0

リストのインデックスとしてnumpy.random.zipf(shape_parameter)の出力を使用してください。しかし、zipfディストリビューションがアンバウンドで、その値があなたのインデックスよりも大きいかもしれないという問題があります。ブロックtry:except:に挿入してください。
コードを複数回実行すると、リストから異なる値が引き出されます。しかし、zipfディストリビューションはバインドされておらず、あなたのリストインデックスはそうではないので、正確にzipf配布されません。

Sapleコード:

objlist = ['Here', 'in', 'the', 'wall', 'why'] 
index = np.random.zipf([1.2, 1.2]) 
for idx in index: 
    if idx < len(objlist): 
     print(objlist[idx]) 
    else: 
     print "Index {} exceed list".format(idx) 

Wikipedia: Zipf Distribution

+0

興味深い提案があります。コードの例を設定することは可能ですか?私は分配を理解することができないので、私は少しトリッキーです。 – Antonis

+0

非常に便利です。最後の1つの質問。私はこれに応じて2つの値を選択したい場合、どのようにこれを達成することができますか? – Antonis

+0

あなたが好きな場合は、答えとupvoteを受け入れてください。 ) – UpSampler

0

私はあなたの要求を誤解していないイムを願って、ここに私のコードは次のとおりです。

import random 
objlist = ['Here', 'in', 'the', 'wall', 'why'] 
print random.choice(objlist) 
+0

これは単純に値をランダムに選択しています。選択したzip分布に従いたいと思っています。 – Antonis

2

実際の経験ジップ分布に応じて選択するには、最初に英語の単語の頻度の表が必要です。最も頻繁に行なわれる10万人がhereを得ることができます。 PDFだ

、テキストは、取り扱いが容易であるので、それを変換し、Linux上で、あなたはこれが作成されます

pdftotextのfreq100000.pdf

を行うことができます次の小さなスクリプトで使用できるテキストファイルfreq100000.txt

import re 
import numpy as np 

record = re.compile('[0-9]+ [0-9]+ [a-z]+') 
data = {} 
for line in open('freq100000.txt'): 
    m = record.match(line.strip()) 
    if not m is None: 
     rank, freq, word = m.group(0).split() 
     data[word] = int(rank), int(freq) 

def rel_freqs(wlist): 
    freqs = np.array([data[word.lower()][1] for word in wlist]) 
    ps = np.add.accumulate(freqs) 
    choice = np.searchsorted(ps, np.random.randint(ps[-1])) 
    return choice 

rel_freqs(['Here', 'in', 'the', 'wall', 'why']) 

関数rel_freqsは、リストから単語をランダムに選択し、そのインデックスを返します。単語を描く確率は、英語で出現する頻度に比例する。

+0

よろしくお願いいたします。ありがとうございます。しかし、私はディストリビューションの初心者です、そして、私はこの例に絡んでいます。私はこれを私のリストの場合に適応させたい、それは難しいです。 – Antonis

+0

さて、ステップバイステップで試してみましょう:(1)辞書のダウンロードに成功しましたか? (2)それをテキストに変換するか? (3)スクリプトを実行していますか? - 関数呼び出しを示す行を追加します。 –

+0

オクラホマ、それを手に入れました。 +1。やってみます。ありがとうございました。 – Antonis

関連する問題