我有一个 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/