想了很久,决定还是追寻大神之路,开始写写博客,记录一下成长之路
废话不多说,我们开始讲正题: what is np.transpose?
1、首先看看二维矩阵:
import numpy as np
arr = np.arange(30).reshape(5, 6)
print(arr)
tran_arr = np.transpose(arr, axes=None)
print(tran_arr)
输出结果为:
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]
[18 19 20 21 22 23]
[24 25 26 27 28 29]]
[[ 0 6 12 18 24]
[ 1 7 13 19 25]
[ 2 8 14 20 26]
[ 3 9 15 21 27]
[ 4 10 16 22 28]
[ 5 11 17 23 29]] 这个结果意料之中,很好理解,就是线性代数的转置矩阵
2、再看看多维(三维为例)矩阵
a.首先,要明确坐标问题
np.arange(12).reshape(2, 2, 3)
(2, 2, 3) 分别代表 d, h, w
我们不妨继续看看:
arr = np.arange(12).reshape(2, 2, 3)
print(arr[1, 0, 0])
输出结果为:
6 这下明白了吧,动手实践,多试几个
b. 接下来还要明白一个索引问题
形状 | 索引 |
---|---|
2 | 0 |
2 | 1 |
3 | 2 |
我们看看代码:
arr = np.arange(12).reshape(2, 2, 3)
print(arr)
tran_arr = np.transpose(arr, (1, 0, 2)) # (1, 0, 2)即为上面所说的索引号
print(tran_arr)
输出结果:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
[[[ 0 1 2]
[ 6 7 8]]
[[ 3 4 5]
[ 9 10 11]]]
这样就实现了转置矩阵,但是对于初学者这个例子恐怕远远不够理解,我们换个例子你就懂啦!
arr = np.arange(24).reshape(3, 4, 2)
print(arr)
tran_arr = np.transpose(arr, (1, 0, 2))
print(tran_arr)
输出结果:
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]
[12 13]
[14 15]]
[[16 17]
[18 19]
[20 21]
[22 23]]]
[[[ 0 1]
[ 8 9]
[16 17]]
[[ 2 3]
[10 11]
[18 19]]
[[ 4 5]
[12 13]
[20 21]]
[[ 6 7]
[14 15]
[22 23]]]
上面的shape 由(3,4,2)变成了(4,3,2),不就是因为索引号由(0,1,2)变成了(1,0,2)吗?
转置就是这么简单!