Как использовать рекурсию или другую технику для решения следующей задачи - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть некоторая матрица, в которой данные заполняются с использованием индексов. Ниже приведен пример кода, который даст вам представление о том, что я пытаюсь реализовать.

# 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).

1 Ответ

1 голос
/ 18 февраля 2020

Это не рекурсивно, просто использует встроенные 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...