我尝试将5个元素和50个数字list(itertools.combinations(range(1, 51), 5))
的组合转换为两个坐标[x, y]
。我的目标是将所有概率放入一个网格中,然后随机化某种组合以使其属于其坐标。
我认为我需要使用将矩阵从matrix(a, b, c, d, e)
更改为matrix(x, y)
的基础,但是我没有达到我的目标。
组合将返回类似:
1, 2, 3, 4, 5 1, 2, 3, 4, 6 ... 1, 2, 3, 4, 50 ... 1, 2, 3, 5, 7 ... 44, 46, 47, 48, 49 ... 46, 47, 48, 49, 50
因此,我想为每个组合获取唯一的标识符,然后将该数字转换为二维矩阵中的坐标。
我认为这是最简单的方法。
因为我的目标仍然是同一回事:在屏幕上表示所有2,118,750个组合,然后插入一些随机组合以查看它们如何占据所有可打印表面。
换句话说:要做这样的事情:http://lotterycodex.com/visual-analysis
答案 0 :(得分:1)
一种快速而肮脏的方法:
import itertools
index = {c:i for i,c in enumerate(itertools.combinations(range(1,51),5))}
def f(c):
return divmod(index[c],1456) #1456 = the ceiling of the square root of 2118750
例如,
>>> f((10,20,30,40,50))
(983, 913)
可以通过计算组合的秩函数来直接计算组合的索引,但是初始化字典只需要一秒钟左右的时间,那么为什么要麻烦呢?