1

在此处输入图像描述 我上面有一个等式,我想计算红色下划线的总和,[ρ0,ρ1,ρ2,...,ρN] 是一个开始的列表。

for 循环肯定可以解决问题。但我想知道是否有更简洁的pythonic风格。我尝试了 reduce 函数,但它似乎只适用于列表的直接求和或乘法。像上面显示的那样进行求和的方法是什么?

4

3 回答 3

3

我认为您正在寻找的是:

sum((x-y)**2 for (x,y) in izip(a, a[1:]))

对于一个数组a。允许您同时访问数组的第 i 个和第 i+1 个元素
izip(a, a[1:])

于 2015-03-06T15:34:51.447 回答
1

使用它可能会更好numpy,但在纯 python 中,您可以对生成器表达式求和。例如

>>> sum(i**2 for i in range(10))
285

对于您的第二个任期,只需嵌套总和:

>>> sum(sum(i*j for i in range(10)) for j in range(10))
2025

其中我的i*j术语是您计算 rho 差异和余弦项的乘积的函数。

于 2015-03-06T15:33:17.137 回答
1

或者,您可以尝试编写递归函数

def listsum(numList):
   if len(numList) == 2:
        return math.pow(numList[0] - numList[1], 2)
   else:
        return math.pow(numList[0] - numList[1], 2) + listsum(numList[1:])

并称它为

listsum([1,3,5,7,9])
于 2015-03-06T15:38:26.663 回答