FreqDist,python中的平方值

时间:2012-05-26 19:56:17

标签: python nltk

我有python 2.7代码来对FreqDist中的值进行平方(即NLTK频率分布),以及所有正方形的总和。

例如,从这个: 你应该得到: 2 * 2 + 1 * 1 + 1 * 1 + 1 * 1 = 7

这适合我,但我想知道是否有更好的"比这更好的方法:

        for word, frequency in t.freq_dist.iteritems():
            total += frequency*frequency

我问,因为我需要再次循环通过freq_dist以获取其他内容;在这段代码之后,所以我认为如果有更好的方法,必须循环两次才是不错的做法...

3 个答案:

答案 0 :(得分:1)

lst = [2, 1, 1, 1]

使用generator expression

sum(i**2 for i in lst)

给出

7

或者,list comprehension也有效:

sum([i**2 for i in lst])

如果以后某些目的不需要平方值,则生成器表达式是更好的选择,因为它只按需创建一次值,而列表推导在内存中创建整个列表。有关详细信息,请参阅此问题comparing list comprehension vs generators

答案 1 :(得分:1)

如果你使用Numpy,你可以对数组进行平方:

>>> from numpy import array
>>> values = array([2, 1, 1, 1])
>>> sum(values**2)
7

如果你要进行任何重复的,繁重的计算,我建议你使用Numpy。它会给你带来巨大的速度提升。

答案 2 :(得分:0)

如果第二个循环对total具有依赖性,那么,不会有更好的方法。如果具有这样的依赖性,是的,更好(即更快)的方法是将当前循环中的另一个循环中的工作包括在内。但实际上加速应该是不重要的。