zoukankan      html  css  js  c++  java
  • 详解numpy中transpose()函数

    今天在网上搜寻了许多博客,始终没有真正理解numpy中的transpose()函数,

    transpose 的原理其实是根据维度(shape)索引决定的,举个栗子:

    x = np.arange(4).reshape((2,2)) //生成一个2x2的数组
    print(x)
    [[0 1]
    [2 3]]
    我们生成了一个维度为二维的数组,其中有两个索引值(矩阵的行与列)。

    transpose()函数的作用就是调换数组的行列值的索引值,类似于求矩阵的转置:

    x = np.arange(4).reshape((2,2))
    x = np.transpose(x)
    print(x)
    [[0 2]
     [1 3]]
    我们可以直观的看到,数组的行列索引值对换,1的位置从x(0,1)跑到了x(1,0)。

    那么三维数组呢?

    我们继续生成一个三维的数组:

    x = np.arange(12).reshape((2,2,3)) //生成一个2x2x3的数组
    print(x)
    [[[ 0  1  2]
      [ 3  4  5]]
    [[ 6  7  8]
      [ 9 10 11]]]
    我们从高中数学知道三维由x轴、y轴以及z轴组成。

    假设三维数组当中的索引值为x,y,z

    transpose()函数的作用就是调换x,y,z的位置,也就是数组的索引值。

    所以我们正常的数组索引值为(0,1,2),等于(x,y,z)

    我们来看实例代码:

    x = np.arange(12).reshape((2,2,3))
    print(x)
    [[[ 0 1 2]
    [ 3 4 5]]
    [[ 6 7 8]
    [ 9 10 11]]]

    x = np.transpose(x,(1,0,2)) //transpose()函数的第二个参数就是改变索引值的地方
    print(x)
    [[[ 0 1 2]
    [ 6 7 8]]
    [[ 3 4 5]
    [ 9 10 11]]]
    通过transpose()函数改变了x的索引值为(1,0,2),对应(y,x,z)

    索引改变后原本y的值和x的值对换了。

    有上面代码的数字7为例,原本的7的位置索引为(1,0,1),通过transpose(x,(1,0,2))索引改变为(0,1,1)

    无论四维、五维……都可以用这个原理分析。

    懂了吧?原理其实很简单对不对!

    对矩阵内的每一个元素都执行这样的运算就可以了

    同理swapaxes()也是这样的操作,需要传入两个轴的编号.swapaxes也是返回源数据的视图(不会进行任何复制操作)

    ————————————————
    版权声明:本文为CSDN博主「DeepGym」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37377691/article/details/80086480

  • 相关阅读:
    n9多媒体不显示图片处理方法
    STM32全球唯一ID读取方法
    VS2008+QT+CYAPI开发USB程序问题
    QT对话框中show和exec的区别
    华硕T20信号差的解决办法
    使用JTAG方式配置EPCS芯片时显示容量不够的解决方法
    QT中使用中文
    MODBUS CRC16
    递归的四条基本法则
    Java代码混淆和加密Jocky
  • 原文地址:https://www.cnblogs.com/sggggr/p/12192242.html
Copyright © 2011-2022 走看看