从4D列表构建图像

时间:2016-08-02 10:42:01

标签: python list python-2.7 numpy

我有一个大小为(10,10,3,64)

的列表

这表示64个大小为10x10x3

的图像的列表

我想创建1张大小为80x80x3的图片,其中每张图片并排显示。我不确定如何合并这些轴以确保图像完整性。

只是一个例子,一个单一的图像是

myList[all][all][all][0]

2 个答案:

答案 0 :(得分:3)

IIUC解决这个问题的一种方法是重塑和换位。

1)重塑以将最后一个维度分成两个维度。

2)移调以使最后两个分开的暗角接近前两个暗角。)

3)最后再次重塑以将前两个dims和接下来的两个dim合并为一个dim。

因此,我们会有这样的实现 -

np.array(myList).reshape(10,10,3,8,8).transpose(0,3,1,4,2).reshape(80,80,3)

答案 1 :(得分:1)

你可以通过np.concatenate和嵌套列表推导来尝试这个,例如:

arr = np.array(mylist)

arr2 = np.concatenate([ np.concatenate([arr[...,i + 8*j] for i in np.arange(8)],axis=0) for j in np.arange(8)],axis=1 )

print(arr2.shape)

给出

(80, 80, 3)

列表推导将整个图像阵列分成存储在长度为8的列表中的单个图像,然后连接从这些列表中形成一个阵列,其中每个图像按顺序存储。

请注意。只需更改使用的数字,就可以相对轻松地更改您想要平铺图像的方式。例如,如果您想要12x4平铺而不是8x8

arr2 = np.concatenate([ np.concatenate([arr[...,i + 12*j] for i in np.arange(12)],axis=0) for j in np.arange(4)],axis=1 )