Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用递归或其他技术解决以下问题_Python_Recursion_Math_Optimization - Fatal编程技术网

Python 如何使用递归或其他技术解决以下问题

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)):

我有一些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)):
            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]``刚才不需要将“对象”(列表)本身作为参数传递——只传递它们的长度就足够了