Numpy标准偏差问题

谁能告诉我这个for循环哪里出了问题,这个循环的目的是将特定的语料库、样本大小和样本数量作为输入,然后给出预期情感标记、归一化词汇多样性和短句概率的平均值。它也是为了给我这三个统计数字的标准差。我是一个真正的Python新手,所以我不知道我到底哪里出错了,谢谢。

选择 | 换行 | 行号
  1. def test_iterate(corpus_reader, sample_size, number_of_samples):
  2. for i in xrange(number_of_samples):
  3. tokens = corpus_reader.sample_words_by_sents(sample_size)
  4. sents = corpus_reader.sample_sents(sample_size)
  5. expected_sentiment_tokens(tokens)
  6. normalised_lexical_diversity(tokens)
  7. prob_short_sents(sents)
  8. stats = expected_sentiment_tokens(tokens)
  9. stats_two = normalised_lexical_diversity(tokens)
  10. stats_three = prob_short_sents(sents)
  11. print "Average expected no of sentiment tokens: %s" % average(stats)
  12. print "Average normalised lexical diversity: %s" % average(stats_two)
  13. print "Average probability of short sentences: %s" % average(stats_three)
  14. print "Standard deviation of sentiment tokens: %s" % std(stats)
  15. print "Standard deviation of normalised lexical diversity: %s" % std(stats_two)
  16. print "Standard deviation of probability of short sentences: %s" % std(stats_three)

例如,当我打电话给

选择 | 换行 | 行号
  1. test_iterate(tcr, 500, 3)

,则会给出以下输出:

选择 | 换行 | 行号
  1. 127.333333333 
  2. 2.08398681196 
  3. 0.506 
  4. 116.25 
  5. 2.21737363871 
  6. 0.518 
  7. 123.333333333 
  8. 1.9821801535 
  9. 0.534 
  10. Average expected no of sentiment tokens: 110.416666667 
  11. Average normalised lexical diversity: 2.89485940038 
  12. Average probability of short sentences: 0.518 
  13. Standard deviation of sentiment tokens: 0.0 
  14. Standard deviation of normalised lexical diversity: 0.0 
  15. Standard deviation of probability of short sentences: 0.0
# 回答1


你的东西有什么问题吗?与印刷的内容相比,您期望的是什么?看起来您并没有将每次迭代的结果保存到for()循环中,所以我们只打印最后一遍,但我不能从您提交的内容中判断出来。添加一些类似以下内容的打印语句

选择 | 换行 | 行号
  1. def test_iterate(corpus_reader, sample_size, number_of_samples):
  2.      for i in xrange(number_of_samples):
  3.          tokens = corpus_reader.sample_words_by_sents(sample_size)
  4.          sents = corpus_reader.sample_sents(sample_size)
  5.          expected_sentiment_tokens(tokens)
  6.          normalised_lexical_diversity(tokens)
  7.          prob_short_sents(sents)
  8.  
  9.          stats = expected_sentiment_tokens(tokens)
  10.          print "stats in for loop =", stats
  11.  
  12.          stats_two = normalised_lexical_diversity(tokens)
  13.          stats_three = prob_short_sents(sents)
  14.  
  15.      print "using stats =", stats, type(stats)
  16.      print "Average expected no of sentiment tokens: %s" % average(stats) 

如果"stats"不是数字数组,那么您可能是在求一个数字的平均值,而不是一列数字的平均值。

# 回答2


谢谢你的快速回复。我刚试过了,这就是结果

选择 | 换行 | 行号
  1. stats in for loop = 191.473684211
  2. stats in for loop = 186.277777778
  3. stats in for loop = 182.473684211
  4. stats in for loop = 182.611111111
  5. using stats = 182.611111111 <type 'float'>
  6. Average expected no of sentiment tokens: 182.611111111

你知道我怎样才能修复我的代码,让它正常工作吗?只需要每个统计量的平均值和标准差即可。
再次感谢您。

# 回答3


您必须将循环中的每个值附加到一个数值数组中,并对该数组求平均值(
一些定义
)。只从简单的平均值开始,然后扩展代码。我相信网上有很多关于数组、平均值和标准差的教程/例子。
# 回答4


您能告诉我下面的代码出了什么问题吗?

选择 | 换行 | 行号
  1. def test_iterate(corpus_reader, sample_size, number_of_samples):
  2. for i in xrange(number_of_samples):
  3. tokens = corpus_reader.sample_words_by_sents(sample_size)
  4. sents = corpus_reader.sample_sents(sample_size)
  5. print expected_sentiment_tokens(tokens)
  6. s = ([expected_sentiment_tokens(tokens)])
  7. s.append(expected_sentiment_tokens(tokens))
  8. print "Average expected no of sentiment tokens: %s" % average(s)
选择 | 换行 | 行号
  1. test_iterate(rcr, 500, 3)

给出输出

选择 | 换行 | 行号
  1. 191.823529412
  2. 185.117647059
  3. 185.166666667
  4. Average expected no of sentiment tokens: 185.166666667

平均值仅被指定为最后一个值

# 回答5


您只是得到最后一个值,因为这是您所有可用的值。在第6行,您用最新的值替换您所拥有的任何东西。然后在第7行,追加最新的值。结果是最新值的平均值。然后在下一次迭代中,您将从头再来一次。您将永远只有两个最新的值在那里。
# 回答6


我将为子孙后代恢复你们的职位。
请不要编辑您的帖子并删除您问题的所有痕迹。如果有人访问这个帖子来查看答案,我们希望他们能够查看所有内容。此外,如果您已经解决了问题,请发布答案,以便其他面临相同问题的人可以从您的解决方案中受益。

标签: python

添加新评论