1 transpose介绍与代码演示
表示矩阵的转置,可以通过单个数据的位置来理解。每个元素根据矩阵的索引会有一个位置,转置之后元素的位置会变成新的位置,比如一个元素开始的位置是 (1,5) ,转置之后就是(5,1)了;开始的位置是(1,1,0,6),转置的参数设置为(1,2,3,0)之后,该元素的位置变为 (1,0,6,1),思考一下为什么,矩阵整体的shape也会相应变化,假如之前是(2,2,7,7), 转置之后就是(2,7,7,2)。
代码演示:
import numpy as np
a = np.array([[0, 1],
[2, 3],
[4, 5]])
print('a:', a, a.shape, sep='\n')
print('==========================')
b = np.transpose(a, [1, 0])
# b = np.transpose(a) # 默认转置,与上一行等效
print('b:', b, b.shape, sep='\n')
print('==========================')
x = np.ones((1, 2, 3))
print('x:', x, x.shape, sep='\n')
print('==========================')
b = np.transpose(x, [1, 0, 2])
print('b:', b, b.shape, sep='\n')
print('==========================')
b = np.transpose(x)
print('b:', b, b.shape, sep='\n')
输出:
a:
[[0 1]
[2 3]
[4 5]]
(3, 2)
==========================
b:
[[0 2 4]
[1 3 5]]
(2, 3)
==========================
x:
[[[1. 1. 1.]
[1. 1. 1.]]]
(1, 2, 3)
==========================
b:
[[[1. 1. 1.]]
[[1. 1. 1.]]]
(2, 1, 3)
==========================
b:
[[[1.]
[1.]]
[[1.]
[1.]]
[[1.]
[1.]]]
(3, 2, 1)
2 reshape介绍与代码演示
先按照某顺序打散,再按照这个顺序插入。
C 是按照行顺序, F 是按照列顺序,A 就是按照数据在内存中存储的顺序来。
多维度时:C 顺序准确的含义是从最里面的轴开始读写,而F顺序则是从最外面的轴开始读写
代码演示:
import numpy as np
a = np.array([[0, 1],
[2, 3],
[4, 5]])
print('a:', a, a.shape, sep='\n')
b = np.reshape(a, (2, 3), order='F')
print('b:', b, b.shape, sep='\n')
输出:
a:
[[0 1]
[2 3]
[4 5]]
(3, 2)
b:
[[0 4 3]
[2 1 5]]
(2, 3)
3 混合操作实例
# reshape transpose
操作1: (1, 1, 52, 52) ---------> (1, 1, 2704) ------------> (1, 2704, 1)
# transpose (0, 2, 3, 1) reshape
操作2: (1, 1, 52, 52) ---------> (1, 52, 52, 1) ----------> (1, 2704, 1)
感谢链接:
https://zhuanlan.zhihu.com/p/72128096