2013-08-28 2 views
4
a = [1, 2, 3, 4, 5, 6] 
# OR ! 
a = ['one', 'two', 'three', 'four', 'five', 'six'] 

이 경우 모든 가능한 조합을 알고 싶습니다. 중에서 k 요소를 선택하십시오. 내가 b = scipy.misc.comb(a, 1)를 사용하는 경우, 그것은 보여줍니다 B 내가 내가 1을 선택 그리고 문자열의 배열 인 경우가 작동하지 않습니다 단지 입니다Python SciPy 가능한 경우 n을 선택하십시오.

b = [1, 2, 3, 4, 5, 6] 

. 내가 정말 원하는 무엇

은 다음과 같습니다, 배열 내가 MATLAB을 사용하는 경우 매우 쉬운

요소 중 하나 개 선택 요소의 가능한 집합을 의미

b = [[1], [2], [3], [4], [5], [6]] 
# OR ! 
b = [['one'], ['two'], ['three'], ['four'], ['five'], ['six']] 

. 하지만 SciPy 스택을 사용하려고합니다.

답변

7

scipy을 사용하고이 특정 문제로 itertools을 사용하지 않는 이유는 무엇입니까?

itertools.combinations 또는 itertools.permutations으로 보는 것이 더 적절한 해결책을 제공 할 수 있습니다.

+0

와우. 고마워. 나는 과학 및 수학을 위해 파이썬을 처음 사용합니다. 그래서 itertools에 대해 처음 들었습니다. – songsong

+0

나는 지식을 전달할 수있어 다행 :) – Dman2

4

다음은보다 완벽한 답변입니다. itertools.combinations을 사용해야하며 itertools.permutations이 아닌 조합은 순열과 매우 다릅니다.

예를 들어 [1,2,3,5]과 같은 배열의 두 요소 조합이 필요한 경우 다음 코드로 원하는 결과를 얻을 수 있습니다 (Matlab에 nchoosek에 해당). 더 많은 예제 from this source을 참조하십시오.

>>> import itertools 
>>> all_combos = list(itertools.combinations([1,2,3,5], 2)) 
>>> print all_combos 
[(1, 2), (1, 3), (1, 5), (2, 3), (2, 5), (3, 5)] 

2 차원 배열 그냥 다음 명령을 사용하여 NumPy와 배열에 튜플 목록을 변환과 같이 모든 조합을 좋아하면 :

>>> all_combos = np.array(list(itertools.combinations([1,2,3,5], 2))) 
>>> print all_combos 
[[1 2] 
[1 3] 
[1 5] 
[2 3] 
[2 5] 
[3 5]] 
관련 문제