python 3维矩阵转为2维

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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值