1

このforループは、特定のコーパス、サンプルサイズ、サンプル数を入力として取り、予想される数値の平均と標準偏差を与えることを意図しています。感情トークンの?

def test_iterate(corpus_reader, sample_size, number_of_samples):
for i in xrange(number_of_samples):
    tokens = corpus_reader.sample_words_by_sents(sample_size)
    sents = corpus_reader.sample_sents(sample_size)
    print expected_sentiment_tokens(tokens)
    s = []
    s.append(expected_sentiment_tokens(tokens))
    s = array(s)
print "Average expected no of sentiment tokens: %s" % average(s)
print "Standard deviation of sentiment tokens: %s" % std(s)

test_iterate(rcr, 500, 3)

戻り値

181.166666667
186.277777778
185.5
Average expected no of sentiment tokens: 185.5
Standard deviation of sentiment tokens: 0.0

何らかの理由で、すべてのサンプルを一緒に平均して標準偏差するのではなく、平均が最後のサンプルに設定されています。

4

3 に答える 3

1

上記のように、Pythonではインデントが重要であるため、質問のコードが画面のコードと同じように見えることを常に確認してください。そうでなければ、推測する必要があり、間違っていると、誤った道をたどることができます。とにかく、これ:

s = []
s.append(expected_sentiment_tokens(tokens))

空のリストを作成し続け、ループ内で毎回1つの値を追加します。最初に期待される感情だけを実行すると、おそらく次のようなものが必要になります

def test_iterate(corpus_reader, sample_size, number_of_samples):
    s = []
    for i in xrange(number_of_samples):
        tokens = corpus_reader.sample_words_by_sents(sample_size)
        exp_sent = expected_sentiment_tokens(tokens)
        print exp_sent
        s.append(exp_sent)
    print "s =", s    
    print "Average expected no of sentiment tokens: %s" % average(s)
    print "Standard deviation of sentiment tokens: %s" % std(s)

test_iterate(rcr, 500, 3)

[そして、インデントが重要であることを忘れないでください]

于 2012-10-15T15:19:33.620 に答える
1

デバッガー (または print ステートメント) を使用して、平均と std を呼び出している統計オブジェクトを確認します。

于 2012-10-14T20:04:25.500 に答える
0

Python では、インデントが重要です。あなたが実行したコードは、あなたが示したコードと同じようにインデントされていないことは確かです。実行した「実際の」コードを見てみましょう。また、test_iterate(tcr,1,1) [これが理にかなっている場合 - そうでない場合は、生成できる最小のケースを使用] のような小さなダミー テストを実行してみて、中間結果を出力します。私の予想では、stds が 0 の場合、サイズ 1 のリストを操作しているということです。

于 2012-10-14T21:55:14.627 に答える