制作所有可能的对称4x4像素图像

时间:2017-02-27 17:38:35

标签: python arrays csv numpy iteration

我被困了...... 我计划制作所有可能的对称4x4像素图像。那就是图像的左侧是右侧的镜子。要做到这一点,我已经制作了所有可能的2x4像素图像,并将它们存储在2D数组列表中,因此第一个项目将如下所示,然后继续1而不是0:

[[0,0],
 [0,0],
 [0,0],
 [0,0]]

然后我的计划是遍历列表并通过反转每个阵列并将其与另一个阵列组合来创建4x4像素图像。

最后的结果是我被卡住的地方!结果应该是.csv文件,其中每行是一个4x4像素图像,如下所示:

row1,row2,row3,row4
0000,0011,1100,0000
1101,1010,0101,1011

到目前为止我所拥有的是:

import numpy as np
seq = itertools.product("01", repeat=8)
data = []
for s in seq:
    arr = np.fromiter(s,np.int8).reshape(4,2)
    data = np.append(data, arr)
np.savetxt("test.csv", data, delimiter=",")

但这只是一个开始。我已经尝试了一段时间了,我想我自己也瞎了!有没有人有一个简洁的方法来管理这个?

2 个答案:

答案 0 :(得分:1)

在numpy中,您可以按如下方式旋转2d图像

image[::-1, ::-1]

将两半结合起来:

np.c_[image, image[::-1, ::-1]]

获取您想要的格式:

','.join(['{:04b}'.format(n[0]) for n in np.packbits(image, axis=-1) >> 4])

答案 1 :(得分:0)

您可以尝试使用此行迭代图像,但不确定它是多少'pythonic':

'{0}{1}{1}{0},{2}{3}{3}{2},{4}{5}{5}{4},{6}{7}{7}{6}'.format(*seq[i])

这将获取您的seq列表,并为包含左侧图像的每个元组创建右侧。