我有一个 4d 数组(python),其中有一批 10000 张图像,每个图像有 5 个 channel 。每个图像是 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, :, :])

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

谢谢!

最佳答案

函数 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

关于python - 在 numpy 中转置 4 维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45547182/

10-10 22:11