借鉴代码https://blog.csdn.net/xiongchengluo1129/article/details/79017142
吐槽一下CSDN的垃圾广告。。
这是转置,所以1维(向量)和2维(矩阵)的转置的意义很直观,就是数学上学的。
难的就是超过三维的张量,怎么转置。
先看结果:
>>> import numpy as np >>> three=np.arange(18).reshape(2,3,3) >>> three array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]]]) >>> three.transpose() array([[[ 0, 9], [ 3, 12], [ 6, 15]], [[ 1, 10], [ 4, 13], [ 7, 16]], [[ 2, 11], [ 5, 14], [ 8, 17]]]) >>>
three本身shape是(2,3,3),这个先看清楚了。
然后,transpose不给参数,默认是从(0,1,2)->(2,1,0)【以上的0,1,2表示的维度的序号】
所以,three.transpose的结果,最外围(第一维度)就是3的元素(行列其实无所谓,是吧)
自己画画树状图,比较比较,就很清楚了。
这不是重点,重点是怎么用。
在深度学习中,常见这样的表达:
img_y = np.transpose(img_x, (0,2,1,3))
TensorFlow中的图像数据张量,一般是四维,分别是(张数,宽度,高度,通道数)
这句话的意思就是把宽和高转置。自己体会一下。图片顺序和通道顺序是不变的。