python - 在 numpy 中转置 4 维数组

标签 python arrays numpy multidimensional-array transpose

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

相关文章:

python - 是否有通过 asyncore 的 websocket 服务器的 python 实现

python - 检查电子表格的每个单元格与另一个电子表格的每个单元格的最佳方法?

Oracle 关联数组类型无法在 USING 语句中使用(如果在包中声明了类型)

python - Sphinx autodoc 使用模拟卡在 random.choice() 上

python - TensorFlow 2.0 中神经网络的问题

python - Pandas 使用上一周期填充行值

python - 尽管安装了 Anaconda,Mac 仍使用默认 Python

容量超过 Int.MaxValue 的 C# 数组

python - 将matlab结构导入python

python - 在 Pandas 中跨组应用平均值