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

  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/sggggr/p/12192242.html
Copyright © 2011-2022 走看看