Python 求和

Python summation

我是一个非常新的 python 用户。
我正在尝试计算求和级数。

Equation

我有一个 table,其值(见下文)为 a_(ij)p = 10

data = [["a_{ij}", "j=0", "j=1", "j=2", "j=3"],
["i=1", 4.3, 8.3, 2.9, `1.3],
["i=2", 1.4, 4.7, 6,5, 3.2]]

a_(ij)  j = 0  j = 1  j = 2  j = 3
i = 1    4.3    8.3    2.9     1.3
i = 2    1.4    4.7    6.5     3.2
.
.
i = 20   8.34   2.13  7.93   6.322

而不是为每个 y 值单独编写代码。

# For i = 1
y_1 = 4.3*10**0 + 8.3*10**1 + 2.9*10**2 + 1.3*10**3

有没有更简单的方法来节省时间?

将 a_(ij) 存储为矩阵。要么将其设为二维数组,要么使用 numpy 库并将其设为 numpy 矩阵。

二维数组示例:

a = [[4.3, 8.3, 2.9, 1.3],
     [1.4, 4.7, 6.5, 3.2],
     # you've indicated more lines will go here
     [8.34, 2.13, 7.93, 6.322]]

如果 a 可以由函数生成,我建议您以这种方式生成二维数组,而不是手动输入值。

然后你可以将你的公式作为一个函数来实现:

def y(i):
    p = 10
    total = 0
    for j in range(1,4):
        total += a[i][j] * p**j
    return total

现在您可以通过调用函数(例如y(1) 将为 i=1 给出 y 的值。

您还可以为 y 生成一个数组(如果您经常重复使用相同的 y 值,如果您将它缓存在一个数组中而不是每次都重新计算 y,您的代码将 运行 更快)。

这是一个干净的解决方案:

>>> a = [
...     [4.3, 8.3, 2.9, 1.3],
...     [1.4, 4.7, 6,5, 3.2]
... ]
>>> p = 10.0
>>> import operator
>>> [sum(map(operator.mul, i, map(p.__pow__, range(len(i))))) for i in a]
[1677.3, 37648.4]

如果您使用的是 python 2.7.

,请将 zip 替换为 izip 并从 itertools 导入 izip

这里是您为了比较而发布的人工计算结果:

>>> 4.3*10**0 + 8.3*10**1 + 2.9*10**2 + 1.3*10**3
1677.3