详解高维数组转置-numpy中转置的用法和原理详解

numpy数组转置

很多时候我们需要对数组进行转置以方便运算处理,在numpy中有3种方法可以对数组进行转置,分别是T、transpose、swapaxes。

数组转置原理

首先上例子:

>>> import numpy as np
>>> data = np.arange(24).reshape(2,3,4)
>>> print(data)
# 转置前初始数据,可以视为2*3*4的一个矩阵
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

#  将维度0和维度1调换,变为3*2*4的矩阵
>>> data.transpose(1,0,2);
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])

对于高维数组的转置,其实可以通过index索引来理解,以上面的数据为例说明为什么数据会发生这样的变化。
转置前数组的维度信息是234,此时维度0有2个数据,维度1有3个数据,维度2有4个数据。
转置后,维度0和维度1调换,调换后维度0有3个数据,维度1有2个数据,维度2有4个数据,转置后数组的维度信息应为324
举几个例子(0,5,10,15,18,21)说明数字位置发生的变化:
数字0:转置前的索引是(0,0,0),转置后调换维度,索引为(0,0,0)
数字5:转置前的索引是(0,1,1),转置后调换维度,索引为(1,0,1)
数字10:转置前的索引是(0,2,2),转置后调换维度,索引为(2,0,2)
数字15:转置前的索引是(1,0,3),转置后调换维度,索引为(0,1,3)
数字18:转置前的索引是(1,1,2),转置后调换维度,索引为(1,1,2)
数字21:转置前的索引是(1,2,1),转置后调换维度,索引为(2,1,1)
可以看到上面的数据正是符合这样的变化的。

转置函数介绍

T

对数组进行完全的转置,例如原来是从维度0 ~ 2,转置后是从维度2 ~ 0,原来矩阵是2 * 3 * 4,转置后为4 * 3 * 2.如下所示:

>>> data.T
array([[[ 0, 12],
        [ 4, 16],
        [ 8, 20]],

       [[ 1, 13],
        [ 5, 17],
        [ 9, 21]],

       [[ 2, 14],
        [ 6, 18],
        [10, 22]],

       [[ 3, 15],
        [ 7, 19],
        [11, 23]]])

transpose

指定变换后的维度,例如从维度(0,1,2)到维度(1,0,2),数组从2 * 3 * 4到3 * 2 * 4,如下所示:

>>> data.transpose(1,0,2);
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])

swapaxes

将指定的两个维度进行调换,例如上面的例子就可以理解为是对维度0和维度1进行了兑换,可以用如下代码实现

>>> data.swapaxes(0,1)
array([[[ 0,  1,  2,  3],
        [12, 13, 14, 15]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 8,  9, 10, 11],
        [20, 21, 22, 23]]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值