我是靠谱客的博主 灵巧戒指,最近开发中收集的这篇文章主要介绍torch.transpose(),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先transpose是为了转换矩阵维度的,在numpy和pytorch中的作用都是一样的,分别举例说明:

arr = np.arange(24).reshape((2, 3, 4))
[[[ 0
1
2
3]
[ 4
5
6
7]
[ 8
9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]

目标:将矩阵 arr 的0维度和1维度进行交换
需要注意,transpose每次只能转换两个维度

np.transpose()

np_transpose = arr.transpose((1, 0, 2))
np_transpose = np.transpose(arr, (1, 0, 2))	# 和上一行代码操作结果一致
print(np_transpose, np_transpose.shape)
[[[ 0
1
2
3]
[12 13 14 15]]
[[ 4
5
6
7]
[16 17 18 19]]
[[ 8
9 10 11]
[20 21 22 23]]] (3, 2, 4)

torch.transpose()

使用方法和numpy有略微不同

tensor_arr = torch.tensor(arr)
torch_transpose = tensor_arr.transpose(0, 1)
torch_transpose = torch.transpose(tensor_arr, 0, 1)	# 和上一行代码的结果一致
print(torch_transpose, torch_transpose.shape)
tensor([[[ 0,
1,
2,
3],
[12, 13, 14, 15]],
[[ 4,
5,
6,
7],
[16, 17, 18, 19]],
[[ 8,
9, 10, 11],
[20, 21, 22, 23]]], dtype=torch.int32) torch.Size([3, 2, 4])

这里通过索引讲解一下:
在原始的矩阵 arr 中,每个元素的索引号可以表示成
[ 000 001 002 003 010 011 012 013 020 021 022 023 030 031 032 033 ] [ 100 101 102 103 110 111 112 113 120 121 122 123 130 131 132 133 ] begin{bmatrix} 000 & 001 & 002 & 003 \ 010 & 011 & 012 & 013 \ 020 & 021 & 022 & 023 \ 030 & 031 & 032 & 033 end{bmatrix} begin{bmatrix} 100 & 101 & 102 & 103 \ 110 & 111 & 112 & 113 \ 120 & 121 & 122 & 123 \ 130 & 131 & 132 & 133 end{bmatrix} 000010020030001011021031002012022032003013023033100110120130101111121131102112122132103113123133
将维度为0和维度为1进行转换,那么新索引可以表示为
[ 000 001 002 003 100 101 102 103 200 201 202 203 300 301 302 303 ] [ 010 011 012 013 110 111 112 113 210 211 212 213 310 311 312 313 ] begin{bmatrix} 000 & 001 & 002 & 003 \ 100 & 101 & 102 & 103 \ 200 & 201 & 202 & 203 \ 300 & 301 & 302 & 303 end{bmatrix} begin{bmatrix} 010 & 011 & 012 & 013 \ 110 & 111 & 112 & 113 \ 210 & 211 & 212 & 213 \ 310 & 311 & 312 & 313 end{bmatrix} 000100200300001101201301002102202302003103203303010110210310011111211311012112212312013113213313
将对应索引进行拼接,就是最终的 (3, 2, 4)的shape了
所以transpose更深层次的意义是将 矩阵 中数值的索引顺序改变,例:原来[0, 2] 索引的数值 2 在 transpose 后的矩阵中通过[2, 0] 索引,在高维度 tensor 通过这种理解对 transpose 操作就会更为清晰,

最后

以上就是灵巧戒指为你收集整理的torch.transpose()的全部内容,希望文章能够帮你解决torch.transpose()所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部