问题:当数据由233,permute变为332后,数据内容是否会混乱呢?
答:当前是单独有x的分量33,y的分量33。将两个分量进行拼接得到:233的形式。此时使用permute 将其改为332的形式,是不会改变数据形式的。最终相当于是有3*3个[x,y]的坐标形式,并且x会和对应位置的y进行组合。只需要理解每个维度上代表的含义即可,不需要关注具体数据的变化。
以下为可能的代码示例:
# 原始数据:2(x/y分量) × 3(y坐标) × 3(x坐标)
x_component = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # x方向运动
y_component = [[10, 20, 30], [40, 50, 60], [70, 80, 90]] # y方向运动
data = np.array([x_component, y_component]) # shape (2, 3, 3)
data_permuted = np.transpose(data, (2, 1, 0)) # shape (3, 3, 2)
此回答,同样可以解释为什么 图像是H* W* C形式,改变形式为 C* H* W后,仍然可以正常显示图像,不会造成像素值混乱。
数据存储顺序的变化不会丢失信息,但需要正确解释维度含义
。只需要宏观的理解现在第一个维度是代表高度,第二个代表宽度,第三个代表通道数即可,不用关注具体的数据变化。
- H* W*C(常见于OpenCV、Matplotlib)
维度顺序:行(Height)× 列(Width)× 通道(Channels)。
物理意义:
每个像素点 (y, x) 是一个长度为 C 的向量(如RGB图像的 [R,G,B])。
例如 image[100, 200, 0] 表示第100行、第200列的红通道值。
- CHW(常见于PyTorch/TensorFlow)
维度顺序:通道(Channels)× 行(Height)× 列(Width)。
物理意义:
所有像素的红通道排在第一个“二维矩阵”,绿通道在第二个,蓝通道在第三个。
例如 image[0, 100, 200] 表示红通道的第100行、第200列的值