2013-06-18 32 views
1

我必须在python脚本中使用动态编程。从python中的N-K矩阵跨越K-uplets

我用shape =(N,K)定义了一个numpy数组u。 我想为每一列选择一个元素,因此生成一个K-uplets。

您将如何着手以这种方式生成的所有K-uplet进行有效循环?一种解决方案是使用

import itertools 
itertools.combination_with_replacement(list,K) 

其中列表= [0..N-1],但我将需要迭代地构建每个使用迭代工具方法的输出(指数)我的K-uplets的。 有没有更直接的方法呢?

感谢

文森特

回答

0

您可以arr[ind, np.arange(K)]建立K-uplet。当然,这实际上是一个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

THX!这正是我所期待的 – Vincent