Python 如何使用递归或其他技术解决以下问题
我有一些n-d矩阵,其中的数据是使用索引填充的。下面是一个示例代码,它将让您了解我试图实现的内容Python 如何使用递归或其他技术解决以下问题,python,recursion,math,optimization,Python,Recursion,Math,Optimization,我有一些n-d矩阵,其中的数据是使用索引填充的。下面是一个示例代码,它将让您了解我试图实现的内容 # sf = some_function or it can also be considered as array where # sf(i) = sf[i] def sample_function(matrix, matrix2, obj1, obj2): for i in range(len(obj1): for j in range(len(obj2)):
# sf = some_function or it can also be considered as array where
# sf(i) = sf[i]
def sample_function(matrix, matrix2, obj1, obj2):
for i in range(len(obj1):
for j in range(len(obj2)):
for k in range(len(obj3):
matrix[sf(i)][sf(j)][sf(k)] = matrix2[i][j][k]
如果函数只有2-3个参数,这很容易做到,但是如果参数很多,我怎么做呢?
您可以假设矩阵中已经填充了一些值(0)。这不是递归的,只是利用了内置的itertools,它可能仍然对您有用。。。如果我正确理解了你的问题,那就是:)否则请纠正我
import numpy as np
import itertools as it
def other_fun(*args):
return sum(args)
def sample_fun(mtx, *args):
for ids in it.product(*[range(len(obj)) for obj in args]):
mtx[ids] = other_fun(*[obj[idx] for obj,idx in zip(args,ids)])
return mtx
obj1 = [1,2,3]
obj2 = [4,5,6,7]
obj3 = [8,9]
objects = [obj1, obj2, obj3]
mtx = np.zeros([len(obj) for obj in objects])
mtx = sample_fun(mtx, *objects)
print(mtx)
什么是obj1,obj2?你可以假设一些不可数。为了理解,每个对象都会创建一个新的更深的循环?所以obj1、obj2、obj3将生成矩阵[obj1[obj2[obj3]]?是的,每个对象将创建一个新的更深的循环。查找
itertools.product
嘿,我刚刚通过添加另一个参数编辑了问题。请看一看。它仍然类似于ish:“`def sample_-fun(mtx1,mtx2,*args):用于其中的ID。product(*[range(len(obj))用于args中的obj]):mtx1[tuple(sf(idx)用于idx中的idx)]=mtx2[ids]``刚才不需要将“对象”(列表)本身作为参数传递——只传递它们的长度就足够了