【Python学习】numpy之数组转置和轴交换的三种方式

Python中的numpy库对数组进行操作是非常方便的,在学习到使用numpy进行数组转置时遇到了一些问题,亲自动手操作后,对这个问题算是能够理解了。

  1. 1 首先是使用数组对象的T属性,对数组进行转置。简单的一维和二维数组比较好理解,无非就是线性代数中的行列相互交换。对于高维数组的转置看如下具体操作:
import numpy as np
a = np.arange(12).reshape(2, 2, 3)
print(a)

创建一个三维矩阵,由2个2*3的矩阵块组成。

output:

[[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]

其中每个元素都有其唯一的坐标(x,y,z),例如0:【0,0,0】,1:【0,0,1】。。。。11:【1,1,2】。此时对a进行转置看看结果:

print(a.T)

output:

[[[ 0  6]
  [ 3  9]]

 [[ 1  7]
  [ 4 10]]

 [[ 2  8]
  [ 5 11]]]

a数组变成了3*2*2的了,再看一下各个元素的坐标可以发现0:【0,0,0】,1:【1,0,0】。。。。。11:【2,1,1】,每个元素坐标的x和相互交换了位置。其实该T操作等同于后面两种方法a.transpose(2,1,0)以及a.swapaxes(0,2),具体分析后面来说。

 

  1. 2 第二种是使用方法transpose进行轴的交换,你的数组是几维的该方法的参数就有几个,看下面具体操作:
a = np.arange(6).reshape(2, 3)
    print(a)
    print("--------------------")
    print(a.transpose(1, 0))


output:

[[0 1 2]
 [3 4 5]]
--------------------
[[0 3]
 [1 4]
 [2 5]]

对于二维数组a中的每个元素的坐标(x,y),例如0:【0,0】。。。。。5:【1,2】只有两个轴x和y对应着transpose方法中的参数0和1,想要把该二维的a数组转置,只需要使用transpose方法,将默认的参数transpose(0,1)改为transpose(1,0),则进行了转置。对于更高维的数组,无非就是轴的个数增加x,y,z。。。。对应0,1,2。。。。。只需要调换轴对应数字参数的顺序就可以将数组进行轴的变换。

1.1中的三维数组的T转置,其实就是transpose中的x和z轴交换。

 

  1. 3 第三种方法是swapaxes方法,法如其名。就是直接进行轴的交换,具体操作如下:
a = np.arange(6).reshape(2, 3)
    print(a)
    print("--------------------")
    print(a.transpose(1, 0))
    print("--------------------")
    print(a.swapaxes(0, 1))


output:

[[0 1 2]
 [3 4 5]]
--------------------
[[0 3]
 [1 4]
 [2 5]]
--------------------
[[0 3]
 [1 4]
 [2 5]]

直接使用swapaxes方法调换二维数组a的0和1轴,达到的效果和transpose方法一样,transpose方法的参数意义理解后,该方法也是一样理解的。

 

补充:该三种方法都是返回了源数据的视图,并没有任何复制操作。

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值