【transpose、reshape】numpy中维度变换

内容分享19小时前发布 陈屹ovo
0 0 0

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= 
 )
print( ========================== )
b = np.transpose(a, [1, 0])
# b = np.transpose(a)     # 默认转置,与上一行等效
print( b: , b, b.shape, sep= 
 )
print( ========================== )

x = np.ones((1, 2, 3))
print( x: , x, x.shape, sep= 
 )
print( ========================== )
b = np.transpose(x, [1, 0, 2])
print( b: , b, b.shape, sep= 
 )
print( ========================== )
b = np.transpose(x)
print( b: , b, b.shape, sep= 
 )

输出:

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= 
 )

b = np.reshape(a, (2, 3), order= F )
print( b: , b, b.shape, sep= 
 )

输出:

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

© 版权声明

相关文章

暂无评论

none
暂无评论...