numpy中的4-d数组转置

时间:2017-08-07 12:41:02

标签: python arrays numpy multidimensional-array transpose

我有一个4d数组(python),每个图像中有一批10000个图像,每个图像有5个通道。每个图像是25 * 25,即4d阵列形状是10000 * 5 * 25 * 25。

我需要转置图片。天真的方式是使用嵌套循环:

            for i in range(np.shape(img)[0]):
                for j in range(np.shape(img)[1]):
                    img[i, j, :, :] = np.transpose(img[i, j, :, :])

但我确信有更有效的方法可以做到这一点。你有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

函数numpy.transpose足以处理多维数组。默认情况下,它会反转维度的顺序。

但是,它需要一个可选的axis参数,该参数明确指定重新排列维度的顺序。要交换4D阵列中的最后两个维度(即转置一堆图像):

np.transpose(x, [0, 1, 3, 2])

不需要循环,它只适用于整个4D阵列并且非常高效。

更多例子:

np.transpose(x, [0, 1, 2, 3])  # leaves the array unchanged
np.transpose(x, [3, 2, 1, 0])  # same as np.transpose(x)
np.transpose(x, [0, 2, 1, 3])  # transpose a stack of images with channel in the last dim