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)]
我在为以下虚拟场景向量化 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)]