我有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以获取其他内容;在这段代码之后,所以我认为如果有更好的方法,必须循环两次才是不错的做法...
答案 0 :(得分:1)
lst = [2, 1, 1, 1]
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
具有依赖性,那么,不会有更好的方法。如果不具有这样的依赖性,是的,更好(即更快)的方法是将当前循环中的另一个循环中的工作包括在内。但实际上加速应该是不重要的。