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