2013-06-18 1 views
1

Мне нужно использовать динамическое программирование в скрипте python.Loop через K-uplets из матрицы N-K в python

Я определил массив numpy с формой = (N, K). Я хочу выбрать один элемент для каждого столбца, поэтому создаю K-uplets.

Как бы вы могли эффективно работать на всех K-uplets, сгенерированных таким образом? Решение было бы использовать

import itertools 
itertools.combination_with_replacement(list,K) 

, где список = [0..N-1], но мне нужно будет построить итерационно каждый из моих K-uplets с использованием выходного сигнала (индекс) метода itertools. Есть ли более прямой способ продолжения?

Благодаря

Винсент

ответ

0

Вы можете построить K-аплета с arr[ind, np.arange(K)]. Конечно, это на самом деле NumPy ndarray, но их легко конвертировать в туплеты, если вы действительно хотите тупочки: tuple(arr[ind, np.arange(K)]).


import numpy as np 
import itertools as IT 

N, K = 5,3 
arr = np.arange(N*K).reshape(N,K) 
print(arr) 
# [[ 0 1 2] 
# [ 3 4 5] 
# [ 6 7 8] 
# [ 9 10 11] 
# [12 13 14]] 

for ind in IT.combinations_with_replacement(range(N), K): 
    print(arr[ind, np.arange(K)]) 
    # [0 1 2] 
    # [0 1 5] 
    # [0 1 8] 
    # [ 0 1 11] 
    # ... 
+0

ТНХ! это именно то, что я искал – Vincent