矩阵的基础变化

时间:2020-08-02 22:20:00

标签: python combinations

我尝试将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

1 个答案:

答案 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)

可以通过计算组合的秩函数来直接计算组合的索引,但是初始化字典只需要一秒钟左右的时间,那么为什么要麻烦呢?

相关问题