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

使用调试器(甚至打印语句)查看您正在调用的统计对象平均和标准......正如 DSM 提到的,它可能是标准 0(即单个数字或类似的东西)

于 2012-10-14T20:04:25.500 回答
1

如上所述,缩进在 Python 中很重要,因此请始终确保问题中的代码看起来与屏幕上的代码一样。否则我们必须猜测,如果我们错了,我们可能会沿着错误的路线走下去。无论如何,这个:

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

将继续制作一个空列表并每次在循环中附加一个值。只做预期的情绪开始,你可能想要类似的东西

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 回答
0

在 Python 中,缩进很重要。我相当确定您运行的代码与您显示的代码的缩进方式不同。让我们看看您运行的“实际”代码。此外,尝试运行较小的虚拟测试,例如 test_iterate(tcr,1,1) [如果这有意义 - 如果没有,则使用您可以生成的最小案例] 并让它打印出中间结果。我的期望是,当标准差为 0 时,您正在处理大小为 1 的列表。尝试找到您的数据列表应该增长的位置并验证它是否会增长。

于 2012-10-14T21:55:14.627 回答