指数与包含产品的指数之和

时间:2019-04-11 14:34:40

标签: python arrays loops

我必须计算一个指标乘积的总和(请参阅附带的方程式)。每个索引有N个和(每个索引都为a),并且乘积包含取决于特定索引(我不想指定)的函数。我尝试过使用双循环

nlist = []
for i in range(a): 
    nlist.append([0])
    for k in range(N):
            nlist[i].append(k+1)
prod=1
result=0
for i in range(a):
    for k in range(0,N):
        prod = prod*f(nlist[i][k])
    result = result+prod

但是我完全不确定正确的顺序以及正确定义数组nlist[i][k]的方式,以使求和正确。

Equation

2 个答案:

答案 0 :(得分:1)

prod应该在每个产品迭代开始时重置为1。产品应嵌套在总和以下。

result = 0
for i in range(a):
    prod = 1                       #  <<< begin at 1 on each iteration of i    
    for k in range(N):
        prod *= f(nlist[i][k])
    result += prod

执行此操作的更好方法可能是使用理解功能和sum内置函数。与循环相比,这可以说是更数学的表示。

from operator import mul
from functools import reduce, partial

product = partial(reduce, mul)   # let's define a handy lil' function    

result = sum(product(map(f, l)) for l in nlist)

# other variants
# sum(product(f(n_k) for n_k in l) for l in nlist)
# sum(reduce(mul, map(f, l)) for l in nlist)        

如果您正在考虑使用NumPy模块,则可以使用np.prodwhich is considerably faster over reduce(mul, ...)

import numpy as np
product = np.prod

result = ...

答案 1 :(得分:0)

假设您的函数可以应用于numpy数组,并且让nk值为一个(a,N)大小的数组,则只需将两个操作数作为import numpy as np a = 10 N =3 nlist = np.repeat(np.arange(N), a).reshape((N ,a)).T # [[0, 1, 2], [0,1,2], ... f = lambda x: 2 * x + 1 result = f(nlist).prod(1).sum() print(result) >> 150 一起应用即可,例如

prod = 1
result = 0
for i in range(a):
    prod  = 1
    for k in range(0,N):
        prod = prod*f(nlist[i][k])
    result = result+prod
print(result)
>> 150

比较:

--from-file