Numpy标准差对我不起作用

时间:2012-10-14 19:44:03

标签: python numpy

我在这个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

出于某种原因,平均值被设置为最后一个样本,而不是平均值和标准偏差所有样本。

3 个答案:

答案 0 :(得分:1)

使用调试器(甚至是print语句)来查看你正在调用的stats对象和std on ....正如DSM所提到的那样,它可能是std 0(即一个数字或类似的东西)< / p>

答案 1 :(得分: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)

[记住,缩进很重要]

答案 2 :(得分:0)

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