在python中强制所有可能的矩阵组合

时间:2014-02-07 21:25:25

标签: python numpy matrix brute-force

我目前在python中使用numpy创建了一个3x3矩阵(将每个值初始化为0)。我想创建一个小的python程序,强制在矩阵中强制每个可能的KEY组合。例如:

[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)并将其乘以另一个矩阵,直到我得到一个我正在寻找的解决方案...基本上我正在尝试加密加密山密码。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果您的字母表只是10位数字,那么您在那里所做的工作在技术上称为“以10为基数进行计数”; - )

在每一步增加最后一位(右下角)。如果它是9,将它环绕为0并递增倒数第二个数字,依此类推,直到经过100亿步后顶部数字包裹。

也许有可能用itertools.product做一些更高效的事情,但是因为那不会产生你需要的numpy矩阵,也许不会。

如果您的字母表是26个字符,那么您可能需要等待一段时间才能完成运行,因为26 ** 10是一个相当大的数字。

答案 1 :(得分: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