利用NumPy进行高效计算_第二部分

4.矩阵转置:

  • numpy.ndarray.T

返回转置数组。进行矩阵运算时,经常要用数组转置。

>>> import numpy as np
>>> x = np.arange(1,5,dtype = np.float64).reshape(2,2)
>>> x
array([[1., 2.],
       [3., 4.]])
>>> x.T                       # 二维数组的转置使得二维数组的行列发生对换
array([[1., 3.],
       [2., 4.]])
>>> y = np.arange(1,5,dtype = np.float64)
>>> y
array([1., 2., 3., 4.])
>>> y.T                       # 一维数组的转置保持不变
array([1., 2., 3., 4.])
>>>
  • numpy.transpose(a, axes=None)

使用轴交换来实现多维数组的转置。

参数:  a -- 输入数组
      axes(可选) -- 一个整数数列,默认情况下,反转维度,否则根据给定的值对轴进行交换。
返回值:ndarray -- 一个已交换了轴的数组

二维数组转置:

对于一个两行两列的二维数组,通过数组下标访问数据单元,给每个单元赋值,通过以下操作进行:

a[0][0] = 0
a[0][1] = 1
a[1][0] = 2
a[1][1] = 3

指定第一个方括号[]0轴,第二个方括号[]1轴,则建立了以0轴为水平坐标、以1轴为垂直坐标的0-1坐标系,如下图所示:

0-1坐标系

>>> x = np.arange(4).reshape((2,2))         # 创建数组对象,按照0-1坐标系初始化数组单元的值
>>> x
array([[0, 1],
       [2, 3]])
>>> np.transpose(x,(0,1))                   # axes参数为(0,1)时,表示按照原坐标轴改变序列,即保持不变,所以最后的结果不变。                   
array([[0, 1],
       [2, 3]])
>>> np.transpose(x)                         # 不指定axes参数时,默认是数组转置
array([[0, 2],
       [1, 3]])
>>> np.transpose(x,(1,0))                   # axes参数为(1,0)时,表示交换 ‘0轴’ 和 ‘1轴’,其结果是数组转置。
 array([[0, 2],
       [1, 3]])
>>>

转置后,通过数组下标表达的单元数据为:

a[0][0] -> 0
a[0][1] -> 2
a[1][0] -> 1
a[1][1] -> 3

0轴 和 1轴 交换后的1-0坐标系,如下图所示:

0-1坐标系

无论何时,记住第一个方括号[]及下标代表0轴 ,第二个方括号[]及下标代表1轴。

三维数组转置:

>>> import numpy as np
>>> y = np.arange(16).reshape(2,2,4)  # 第一个参数表示第几维,第二个参数表示该维第几行,第三个参数表示该行第几列
>>> y                                 # 构建的数组对象可以理解为2个2*4的矩阵
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
>>>

三维数组对象创建并初始化后,其三维坐标系0-1-2表示如下:

0-1-2坐标系

针对三维数组对象分别进行不同形式的转置可通过坐标轴完成:

>>> np.transpose(y, (0,1,2))       # 坐标轴0-1-2没有变化,数组对象y保持不变
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
>>> np.transpose(y, (1,0,2))       # 坐标轴0与坐标轴1进行了交换,数组对象y发生变化
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])
>>> np.transpose(y, (2,1,0))       # 坐标轴0与坐标轴2进行了交换,数组对象y发生变化
array([[[ 0,  8],
        [ 4, 12]],

       [[ 1,  9],
        [ 5, 13]],

       [[ 2, 10],
        [ 6, 14]],

       [[ 3, 11],
        [ 7, 15]]])
>>>

坐标轴0与坐标轴1交换后的1-0-2坐标系如下所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值