[英]Python summation
我是一个非常新的python用户。
我正在尝试计算求和级数。
我有一个表,其中p = 10
a_(ij)
值(请参见下文)。
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)存储为矩阵。 将其设为 2D数组,或者使用numpy库并将其设为numpy矩阵。
2D阵列范例:
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是可以通过函数生成的东西,我建议您以这种方式生成2D数组,而不是手动输入值。
然后,您可以将公式实现为函数:
def y(i):
p = 10
total = 0
for j in range(1,4):
total += a[i][j] * p**j
return total
现在,您可以通过调用函数来获取任意i值的y值,例如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,请用izip
替换zip
并从itertools
导入izip
。
这是您发布以进行比较的手动计算的结果:
>>> 4.3*10**0 + 8.3*10**1 + 2.9*10**2 + 1.3*10**3
1677.3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.