zoukankan      html  css  js  c++  java
  • numpy中transpose的功能

      看了网上一堆解释,有用相互交换来解释的,我看了半天也看不出所以然来。心想着自己试验一下。

      numpy.transpose的用法很简单:假如你有一个四维的数组,那么四个维度就是0,1,2,3。风格会像下面这样:

    >>>A = np.ones((1, 32, 30, 3))
    >>>A.shape
    (1, 30, 32, 3)
    >>>A.transpose(0,3,1,2)
    

      如你所见,transpose是ndarray的类方法,输入是四个维度的排列,那么这四个维度的排列一定蕴含着交换维度的“规则”。有两个可能(合理)的想法:

      1. 以上面这个例子来说,0, 3, 1, 2分别是第 1, 2, 3, 4 个位置参数。那么transpose的作用就是将原本的第 1, 2, 3, 4维替换到所给的位置,即:原来的第0维调换到0号位置即第0维,原来的第1维调换到3号位置即第3维,所以结果应该是 shape_after = (1, 32, 3, 30)。但是事实并不是如此,why?这不,还有第二种可能的解释

      2. 原来不是有四个维度吗,分别有标记,即0, 1, 2, 3维,那么我们对维度进行调换的过程不就是对这个标签排序的过程吗?那么(0,3,1,2)的意思就是以这样的顺序:第0维,第3维,第1维,第2维的顺序来组成一个新的数组,所以结果应该是 shape_after = (1, 3, 30, 32)。运行之后正好是这样~~

    >>>A = np.ones((1, 32, 30, 3))
    >>>A.shape
    (1, 30, 32, 3)
    >>>A.transpose(0,3,1,2).shape
    (1, 3, 30, 32)
    

      再举个栗子:

    >>>A = np.array([[[1,2],[3,4]],[[4,5],[6,7]]])
    >>>A
    array([[[1, 2],
            [3, 4]],
    
           [[4, 5],
            [6, 7]]])
    >>>A.transpose(0,2,1)
    array([[[1, 3],
            [2, 4]],
    
           [[4, 6],
            [5, 7]]])

      按上面的理论来解释,第一维不动,后两维交换。结果发现两个2×2的矩阵都被转置,而它们好好的并在一起。这不就是我们期待的效果吗?

      总结一下:一个数组原先是有第0,1,2...维的。transpose做的事情就是让这些维度“排个序”,从而达到交换维度的目的。你可能会觉得它与reshape很像,但是其实区别蛮大。reshape是改变了numpy数组元素的“解释”方式,而transpose则显式修改了数据的相对位置,这也是为什么它的英文和“矩阵”转置是一样的原因。

  • 相关阅读:
    HDU 1509 Windows Message Queue
    sql批量更换dedecms文章来源和作者
    dedecms织梦网站时间标签strftime和MyDate解析
    JS代码站原创DEDECMS教程插件系列
    DEDECMS织梦自定义表单中必填项、电话邮箱过滤以及验证码规则
    dedecms标签(tags)页面伪静态设置
    dedecms几个小技巧
    dedecms 5.7 网站搬家后产生的问题记录
    dedecms织梦做中英文(多语言)网站步骤详解
    DedeCMS系统设置说明:站点设置
  • 原文地址:https://www.cnblogs.com/chester-cs/p/13044045.html
Copyright © 2011-2022 走看看