For 循环矢量化 - 按元素

For Loop Vectorization - elementwise

我在为以下虚拟场景向量化 for 循环时遇到问题。

a = [i+2 for i in range(5)]
b = [i**2 for i in range(5)]
c = list(range(3,8))

answer = 0

for i in range(1, 1+c):
    answer += a**i +b**i

显然,上面的形式不起作用,因为范围不将列表作为输入。 对于 c 中的每个元素,我想执行以下操作。 IE 为第 0 个索引

answer = [0, 0, 0, 0, 0]
for j in range(c[0]):
    answer[0] += a[0] **j + b[0]**j

我不确定最好的方法是什么。另一个问题(这就是我一直在思考的原因)是 a、b、c 可以单独是一个浮点数或一个可迭代的数据结构。我希望这是足够的信息,我简化了它,因为实际变量 a、b、c 和 for 循环逻辑比显示的要复杂一些。

如果我对问题的理解正确,那么下面的方法就可以了。

for ind, j in enumerate(c): # enumerate return a tuple of index and value at that index, ind, j
    answer += (a[ind] ** j) + (b[ind] ** j)

我们可以"Pythonize"它并以同样的方式创建一个迭代器。

answer = sum([(a[ind] ** j) + (b[ind] ** j) for ind, j in enumerate(c)])

[已编辑] 以适应 OP 的新问题:

#  Same concept as above

for ind, j in enumerate(c):
    answer[ind] += (a[ind] ** j) + (b[ind] ** j)

迭代器版本

answer= [(a[ind] ** j) + (b[ind] ** j) for ind, j in enumerate(c)]