我有一个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, :, :])
但我确信有更有效的方法可以做到这一点。你有什么想法吗?
谢谢!
答案 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