2014-02-07 69 views
0

我目前在python中使用numpy創建了一個3x3矩陣(初始化每個值爲0)。我想創建一個小型python程序,蠻力強制矩陣中的每個可能的鍵組合。例如:暴力破解python中的所有可能的矩陣組合

[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

什麼是「KEY」組合? – user2357112

+0

你是不是指'[[1,0,0],[0,0,0],[0,0,0]]? – endolith

+0

@ user2357112:一個非奇異的3×3矩陣,在環中以乘以字母大小(通常爲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不工作= [(I = numpy反轉)。反正有沒有......還是現在我必須自己計算反算? > _> –

+0

什麼是錯誤信息?您可能必須將X定義爲矩陣而不是數組。 – M4rtini

2

如果你的字母僅僅是10位,那麼你在做什麼,有技術上稱爲「基地10計」 ;-)

在每一步遞增最後一個數字(右下)。如果它是9,則將其包圍爲0並遞增倒數第二位數字,等等,直到最後一位數字繞過100億步之後。

也可以用itertools.product做更高效的工作,但是因爲這樣做不會產生你需要的numpy矩陣,也許不會。

如果您的字母是26個字符,那麼您可能會等待一段時間才能完成運行,因爲26 ** 10是一個相當大的數字。

+0

用於計數。 – maxywb