根据像素数计算可能的图像尺寸

Calculate possible image dimensions from pixel count

如果我有一个宽度 x 高度像素的图像,我想编写一个函数,该函数 return 是一个(宽度,高度)元组列表以及重新排列这些像素的可能方法。

例如,如果图像是 87*87 像素,我可以分解宽度和高度以获得素数列表:

[3, 3, 29, 29]

现在我想编写一个函数,以所有可能的方式将这些素数以 2 到 return 为一组排列,例如:

[ (3, 3 * 29 * 29), (29, 3 * 3 * 29), (3 * 3, 29 * 29), (29 * 29, 3 * 3), (3 * 29, 3 * 29), (3 * 3 * 29, 29), (3 * 29 * 29, 3) ]

为了清楚起见,我没有将素数相乘。现在我手动做了这个,但我宁愿有一个函数来做。我在 Python 中没有找到一种简单的方法来做到这一点,即使使用 itertools 也没有。

例如,这会打印列表 l:

中 3 的组合
l = [3, 3, 29, 29]
for t in itertools.groupby(itertools.combinations(l, 3)):
    print(t[0])

但它并没有真正告诉第四个元素是哪个,每个组合中遗漏的那个。

有没有人有从素数列表中计算所有可能的二元组的好方法。在每个元组中,逗号两边必须使用所有素数。最好不要重复(在我的例子中就是 groupby 的用途)。

这比您尝试使用质因数更容易。

a = 87*87
print([(x, a//x) for x in range(1, 1+int(math.sqrt(a))) if a % x == 0])

输出:

[(1, 7569), (3, 2523), (9, 841), (29, 261), (87, 87)]

当然,你还需要为每个可能的尺寸翻转宽度和高度,除了方形的(如果有方形的)。

即使你有一个巨大的纹理(比如 16384x16384),这基本上也是即时的。