我目前在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)并将其乘以另一个矩阵,直到我得到一个我正在寻找的解决方案...基本上我正在尝试加密加密山密码。
非常感谢您的帮助!
答案 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