[Python] 维度交换函数:transpose(m,n,r)和permute(m,n,r) | 您所在的位置:网站首页 › python两个数互换 › [Python] 维度交换函数:transpose(m,n,r)和permute(m,n,r) |
a.transpose(m,n,r)的参考博客:python的numpy中的transpose函数功能分析 a.permute(m,n,r)功能和a.transpose(m,n,r)一样。故以下以a.transpose(m,n,r)为例来讲解。 根据评论区指出,a.permute(m,n,r)是torch。 对于一维矩阵,该函数无效果。 对于二维矩阵,结果为原矩阵的转置。 对于三维矩阵则比较难理解,需要理清几个重要的概念。 首先是介绍维度的概念。 我们先生成一个ndarray。 b=np.array([[[ 0, 1, 2,3], [ 4,5,6,7], [ 8,9, 10,11]], [[12, 13, 14, 15], [16, 17,18, 19], [20, 21,22, 23]]])再使用print(b.shape),查看其原有维度为(2, 3, 4) 维度的默认排序是(0,1,2) 由于索引从0开始,所以b的元素的索引为: # 维度的默认排序是 (0,1,2) b=np.array([[[ 0, 1, 2,3], (0,0,0) (0,0,1) (0,0,2) (0,0,3) [ 4,5,6,7], (0,1,0) (0,1,1) (0,1,2) (0,1,3) [ 8,9, 10,11]], (0,2,0) (0,2,1) (0,2,2) (0,2,3) [[12, 13, 14, 15], (1,0,0) (1,0,1) (1,0,2) (1,0,3) [16, 17,18, 19], (1,1,0) (1,1,1) (1,1,2) (1,1,3) [20, 21,22, 23]]]) (1,2,0) (1,2,1) (1,2,2) (1,2,3)执行以下代码,进行维度变换 c=b.transpose(2,1,0)执行c=b.transpose(2,1,0),维度的排序由默认的(0,1,2) 变为(2,1,0)。 对应的shape由(2, 3, 4)变为(4, 3, 2)。 元素的索引变化成如下的结果。 # 维度变换表现为:元素索引的 第三个数 和 第一个数 交换位置 # b=np.array([[[ 0, 1, 2,3], (0,0,0) (1,0,0) (2,0,0) (3,0,0) # [ 4,5,6,7], (0,1,0) (1,1,0) (2,1,0) (3,1,0) # [ 8,9, 10,11]], (0,2,0) (1,2,0) (2,2,0) (3,2,0) # # [[12, 13, 14, 15], (0,0,1) (1,0,1) (2,0,1) (3,0,1) # [16, 17,18, 19], (0,1,1) (1,1,1) (2,1,1) (3,1,1) # [20, 21,22, 23]]]) (0,2,1) (1,2,1) (2,2,1) (3,2,1) # # 按索引重新排列得: # [[[ 0 12] (0,0,0) (0,0,1) # [ 4 16] (0,1,0) (0,1,1) # [ 8 20]] (0,2,0) (0,2,1) # # [[ 1 13] (1,0,0) (1,0,1) # [ 5 17] (1,1,0) (1,1,1) # [ 9 21]] (1,2,0) (1,2,1) # # [[ 2 14] (2,0,0) (2,0,1) # [ 6 18] (2,1,0) (2,1,1) # [10 22]] (2,2,0) (2,2,1) # # [[ 3 15] (3,0,0) (3,0,1) # [ 7 19] (3,1,0) (3,1,1) # [11 23]]] (3,2,0) (3,2,1) |
CopyRight 2018-2019 实验室设备网 版权所有 |