У меня есть массив arr_multi_dim
, который является многомерным. Каждый раз, когда я увеличиваю параметр n, в результатах массива будет создаваться больше записей, и массив будет увеличиваться.
С каждым увеличением n
мне нужно выполнить функцию np.concatenate()
на массив arr_multi_dim
, таким образом, что будет увеличиваться число вложенных функций np.concatenate()
при каждом увеличении n
.
Например,
при n = 2:
arr_multi_dim = np.concatenate(np.concatenate(arr_multi_dim, axis=1), axis=1)
при n = 3:
arr_multi_dim = np.concatenate(np.concatenate(
np.concatenate(np.concatenate(arr_multi_dim, axis=1), axis=1), axis=1), axis=1)
при n = 4:
arr_multi_dim = np.concatenate(np.concatenate(
np.concatenate(np.concatenate(
np.concatenate(np.concatenate(arr_multi_dim, axis=1), axis=1), axis=1), axis=1), axis=1), axis=1)
et c.
где при каждом приращении из n
, пара np.concatenate()
(ie. two) добавляется в функцию.
Как написать функцию, цикл (или что-то подобное), чтобы при указании любого значения для n
, будет использоваться соответствующая функция np.concatenate()
?
Заранее большое спасибо.
Редактировать:
Это полный код, который я написал и который использует вышеуказанную функцию np.concatenate()
.
from itertools import product
from joblib import Parallel, delayed
from functools import reduce
from operator import mul
import numpy as np
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = np.array(lst)
n = 2
def test1(arr, n):
flat = np.ravel(arr).tolist()
gen = (list(a) for a in product(flat, repeat=n))
results = Parallel(n_jobs=-1)(delayed(reduce)(mul, x) for (x) in gen)
nrows = arr.shape[0]
ncols = arr.shape[1]
arr_multi_dim = np.array(results).reshape((nrows, ncols)*n)
arr_final = np.concatenate(np.concatenate(arr_multi_dim, axis=1), axis=1) # need to generalise this
return arr_final
Приведенный выше код работает только для n = 2. Я пытаюсь обобщить часть кода np.concatenate
, чтобы он работал для любого n
, как указано выше.