如何使用Python中的切换维度将4D数组转换为另一个4D数组

时间:2016-07-25 12:34:05

标签: python arrays image numpy tensorflow

我正在尝试从TensorFlow中的卷积层获取图像数据。 我有一个像:

这样的数组
data = [N, Width, Height, Channel]

其中N是图像编号,宽度和高度是图像尺寸和通道索引中的通道。

我需要的是另一个4D阵列,如:

[N, Channel, Width, Height]

原因是循环由N和Channel进行,并获得每个图像的ech通道的2D字节数组。

img = Image.fromarray(data[N][Channel], 'L')
img.save('my.png')

2 个答案:

答案 0 :(得分:1)

只需使用np.transpose

x = np.zeros((32, 10, 10, 3))  # image with 3 channels, size 10x10
res = np.tranpose(x, (0, 3, 1, 2))
print res.shape  # prints (32, 3, 10, 10)

答案 1 :(得分:1)

使用转置功能对尺寸重新排序。

https://www.tensorflow.org/versions/r0.9/api_docs/python/array_ops.html#transpose

你可以在tensorflow代码中做这样的事情。

image = tf.transpose(image, perm = [0, 3, 1, 2])

在perm参数中,您可以指定所需尺寸的新顺序。在这种情况下,您将通道尺寸(3)移动到第二个位置。

如果你想在将它输入张量流模型之前这样做,你可以用同样的方式使用np.transpose。