我了解如何分别使用 1、2 和 3for
循环来定义 1、2 和 3 维的求和,但是如何创建一个对多索引求和的通用函数(如下面定义的函数)?
为简单起见,假设u
仅采样一个随机整数,即
from random import randint
def u(a=0, b=100):
return randint(a, b)
举个例子,假设多索引向量js = [0, 0, 0]
和上限向量Ms = [5, 5, 5]
,这意味着d = 3
(即3维多索引),并且求和可以简单地写成如下
mysum = 0
for j1 in range(Ms[0]):
for j2 in range(Ms[1]):
for j3 in range(Ms[2]):
mysum += u()
但是编写d
尺寸的一般方法是什么(如图所示)?
编辑:我知道在这个简单的例子中,人们可以简单地做类似的事情
from numpy import prod
M = prod(Ms)
mysum = sum([u() for i in range(M)])
但同样,我对一种执行d
嵌套for
循环的通用方法特别感兴趣,因为该函数u
可能更复杂并且取决于索引 j_1、j_2、...、j_d。
您可以使用它
itertools.product
来生成要在函数中使用的所有可能的索引集indices
将您可以递归地执行求和:将函数
calculate_sum
应用于列表中的每个元素,返回非列表元素的总和: