当前位置:   article > 正文

python 3维矩阵转为2维_python三维堆叠为二维

python三维堆叠为二维

python 3维矩阵转为2维

背景

有一个3维图像(多波段遥感影像),想要降维到2维,但要求按z轴方向把图像的每个像素值逐个取出,组成新的2维数组,忽略长宽维度。
在这里插入图片描述

实现

首先想到的是用numpy.reshape()来实现,看到很多帖子也是写了reshape简单的用法,例如
B = np.reshape(A,(-1,2))
但是,直接reshape会默认按第3维度取值,按行填充,不能满足我的需求。这里reshape有一个‘order’参数,可以参考 知乎-陈京九的文章 理解。
在这里插入图片描述

因为我想按z轴(第一维度)取波段值,所以思路也很简单,只要把3维矩阵的维度先调换一下,再用reshape就可以了。
而维度转换可以很方便的用numpy.transpose()实现

a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[0,1,2]]]) 
>>> print(a)
[[[1 2 3]
  [4 5 6]]

 [[7 8 9]
  [0 1 2]]]
· 此时a是一个3维数组,维度是(2, 2, 3),按图像角度来看就是2波段*2*3列

b = a.transpose((1,2,0))
>>> print(b)
[[[1 7]
  [2 8]
  [3 9]]

 [[4 0]
  [5 1]
  [6 2]]]
>>> print(b.shape)
(2, 3, 2)
· transpose后,矩阵维度变为(2, 3, 2)

c = b.reshape((-1,2)) 
>>> print(c)
[[1 7]
 [2 8]
 [3 9]
 [4 0]
 [5 1]
 [6 2]]
>>> print(c.shape)
(6, 2)
· reshape实现最终想要的结果
  • 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
  • 30
  • 31
  • 32
  • 33
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45514
推荐阅读
相关标签
  

闽ICP备14008679号