我需要计算一个双和,现在我在双循环中进行如下操作:
k = 3
sumterm = 0.0
for i in range(k):
for j in range(i+1):
sumterm = i+2*j
我想对这个总和进行矢量化,虽然我所坚持的是,我不只是对i和j的每个组合进行求和,而只是j< I + 1。我该如何对此进行矢量化?
答案 0 :(得分:1)
您要做的是在三角形func
矩阵上求和函数k * k
。以下是使用for循环执行此操作的方法,我稍微修改它以适合我们的抽象。
k = 3
summation = 0.0
for i in range(k + 1): # Loop from 0 to k
for j in range(i + 1): # Loop from 0 to i
summation += func(i, j) # Sum the value
您可以通过使用itertools.product
而不是循环来抽象矩阵来对您的求和进行矢量化。
from itertools import product
summation = sum(func(i, j) for i, j in product(range(k + 1), repeat=2) if j <= i)
函数product
返回一个迭代器,它具有内存效率,特别是如果你需要k
那么大。