2014-02-07 2 views
0

저는 현재 파이썬에서 numpy (모든 값을 0으로 초기화)를 사용하여 3x3 행렬을 생성했습니다. 매트릭스에 가능한 모든 키 조합을 무력하게 만드는 작은 파이썬 프로그램을 만들고 싶습니다.Brute는 파이썬에서 가능한 모든 행렬 조합을 강제합니다.

[1, 0, 0 
0, 0, 0 
0, 0, 0] 

[1, 1, 0 
0, 0, 0 
0, 0, 0] 

등 ... 모든 방법에 : : 예를 들어

[9, 9, 9 
9, 9, 9 
9, 9, 9] 

아주 사소한하지만 주위에 내 머리를 정리하고 수없는 어떤 이유로 보인다. 이유는 내가 찾고있는 해결책을 얻을 때까지 (나는 numpy 사용하여 쉽게) 모든 행렬 조합의 역함을 얻고 다른 행렬에 의해 곱하기 싶습니다 때문입니다 ... 본질적으로 나는 Crypto Hill Cipher를 무차별 적으로 공격하려고합니다.

귀하의 도움에 감사드립니다.

+0

"키 조합"이란 무엇입니까? – user2357112

+0

'[[1, 0, 0], [0, 0, 0], [0, 0, 0]]'을 의미하지 않습니까? – endolith

+0

@ user2357112 : 알파벳의 크기를 기준으로 링에서 수행되는 곱셈을 사용하는 비 특이 3x3 행렬 (일반적으로 26,이 경우 분명히 10). –

답변

1

이것은 생각해야합니다.

from itertools import combinations_with_replacement 
import numpy as np 

x = np.empty((3,3), dtype=int) 

for comb in combinations_with_replacement(range(10),9): 
    x.flat[:] = comb 
+0

당신은 내 아기를 가질 수 있습니다. 고맙습니다! –

+0

오, 거기에 걸어 ... 함수 x.I 작동하지 않습니다 = [(나는 = numpy에서 반대). 어쨌든이 문제가 있습니까? 아니면 지금 스스로 역수를 계산해야합니까? > _> –

+0

오류 메시지가 무엇인가요? X를 배열 대신 행렬로 정의해야 할 수도 있습니다. – M4rtini

2

당신의 알파벳은 다음 기술적으로 "기본 10 세는"이라고 무슨 일을하는지 그냥 10 자리 인 경우 ;-) 각 단계에서

가 마지막 숫자 (오른쪽 아래) 증가. 9 인 경우이를 0으로 감싸서 마지막 자리까지 증가시키고 100 억 단계가 될 때까지 계속하여 최상위 자릿수가 래핑됩니다.

itertools.product을 사용하면 더 효율적으로 처리 할 수도 있습니다.하지만 numpy 행렬이 필요하지 않을 수도 있습니다.

알파벳이 26 자이면 26 ** 10이 다소 큰 숫자이므로 실행이 끝나기까지 기다리는 중일 수 있습니다.

+0

+1을 계산합니다. – maxywb

관련 문제