나를 위해 작동합니다. 그러나 요소를 순서대로 생성하지 않고 먼저 요소를 생성 한 다음 정렬합니다.
n = 5
i = np.array(np.indices(n * (2,))).reshape(n, -1)
i[:, np.argsort(i.sum(0)[::-1], kind='mergesort')].T[::-1]
그것은, 동점시 원래 순서를 유지 하나, 즉 안정된 정렬을 이용하여 이들 숫자의 합으로 진 단어를 정렬한다.
순서대로 단어를 생성하는 용액 itertools
itertools.chain((n*(0,),), (l[0] * (0,) + sum(((1,) + (i-j-1) * (0,) for i, j in zip(l[1:], l[:-1])),()) + (1,) + (n-l[-1]-1)*(0,) for k in range(1,n+1) for l in itertools.combinations(range(n), k)))
이 사람 K 수 (K = 0 특수 맡았다 및 itertools.chain
을 이용하여 미리 결정된다)을 통해 루프로 구성 될 수있다. 각 K 것은 모든 K 요소 서브 세트 리터 세트 '의을 만들 itertools.combinations
사용 {0, 1, ..., N -1}과 이진 워드 집합 각각 변환한다. 이 번역은 l의 각 요소에 하나를 넣고 그 사이에 들어가야하는 0의 수를 계산하여 작동합니다. 선행 및 후행 0은 특수 사례로 이루어져야했습니다.
샘플 출력 : numpy
:
# array([[0, 0, 0, 0, 0], [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0],
[0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [1, 1, 0, 0, 0], [1, 0, 1, 0, 0],
[1, 0, 0, 1, 0], [1, 0, 0, 0, 1], [0, 1, 1, 0, 0], [0, 1, 0, 1, 0],
[0, 1, 0, 0, 1], [0, 0, 1, 1, 0], [0, 0, 1, 0, 1], [0, 0, 0, 1, 1],
[1, 1, 1, 0, 0], [1, 1, 0, 1, 0], [1, 1, 0, 0, 1], [1, 0, 1, 1, 0],
[1, 0, 1, 0, 1], [1, 0, 0, 1, 1], [0, 1, 1, 1, 0], [0, 1, 1, 0, 1],
[0, 1, 0, 1, 1], [0, 0, 1, 1, 1], [1, 1, 1, 1, 0], [1, 1, 1, 0, 1],
[1, 1, 0, 1, 1], [1, 0, 1, 1, 1], [0, 1, 1, 1, 1], [1, 1, 1, 1, 1]])
itertools
:
list(_)
# [(0, 0, 0, 0, 0), (1, 0, 0, 0, 0), (0, 1, 0, 0, 0), (0, 0, 1, 0, 0), (0, 0, 0, 1, 0), (0, 0, 0, 0, 1),
(1, 1, 0, 0, 0), (1, 0, 1, 0, 0), (1, 0, 0, 1, 0), (1, 0, 0, 0, 1), (0, 1, 1, 0, 0), (0, 1, 0, 1, 0),
(0, 1, 0, 0, 1), (0, 0, 1, 1, 0), (0, 0, 1, 0, 1), (0, 0, 0, 1, 1), (1, 1, 1, 0, 0), (1, 1, 0, 1, 0),
(1, 1, 0, 0, 1), (1, 0, 1, 1, 0), (1, 0, 1, 0, 1), (1, 0, 0, 1, 1), (0, 1, 1, 1, 0), (0, 1, 1, 0, 1),
(0, 1, 0, 1, 1), (0, 0, 1, 1, 1), (1, 1, 1, 1, 0), (1, 1, 1, 0, 1), (1, 1, 0, 1, 1), (1, 0, 1, 1, 1),
(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)]
너무 감사합니다! 나는 컴퓨터를 다시 가지고있을 때 내일이 첫번째 것을 시도 할 것이다 :) 나는 지금 나의 전화 위에있다. –
itertools 코드를 설명 할 수 있습니까? 나는 n = 40과 k (1, 2) 범위에서 이것을 시도하고있다. 이것은 단지 41 개의 기본적인 벡터를 제공해야하지만, 어떤 이유로 그것은 영원히 필요하다. 최적화 할 수 있습니까? –
@ Perm.Questiin 방금'n = 40, k in range (1, 2)'로 시도해 보았고 랩톱에서 눈 깜빡 일뿐입니다. 결과에리스트를 적용 했습니까?코드를 좀 더 잘 설명 할 수있는 방법을 알아 보겠습니다. –