2014-02-07 67 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