numpy.ndarray.transpose用法理解

numpy.ndarray.transpose方法对于高维数组来讲,略微有点不太好理解。下面给出我自己对该方法的理解。

对于一个高维数组,transpose((i,j,k))可以这样理解:选取原数组的i轴上的数据作为新数组的0轴,选取原数组的j轴上的数据作为新数组的1轴。而0轴可想象为“片”,1轴可想象为“片上的行”,2轴可想象为“片上的列”。

具体操作来讲:

>>>import numpy as np
>>>a=np.arange(16).reshape(2,2,4)
>>>a
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
>>>a.transpose((2,1,0))
array([[[ 0,  8],
        [ 4, 12]],

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

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

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

选取原数组的2轴的数据作为新数组的0轴,比如0,4,8,12必须在新数组的0轴上,那么到底是[[0,4],[8,12]]还是[[0,8],[4,12]]?

再看j=1,即原1轴上的仍然是新的1轴,即新数组的row就是原数组的row,所以4不能转到1轴,所以是[[0,8],[4,12]]

>>>a.transpose((1,2,0))
array([[[ 0,  8],
        [ 1,  9],
        [ 2, 10],
        [ 3, 11]],

       [[ 4, 12],
        [ 5, 13],
        [ 6, 14],
        [ 7, 15]]])

选取原数组的1轴的数据作为新数组的0轴,比如0,1,2,38,9,10,11必须在新数组的0轴上,那么到底是横排还是竖排?

再看j=2,即原数组的2轴变成新数组的1轴,意思就是原来的列就是现在的行,那确定就是竖排。

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

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

原来的0轴还是新的0轴,那么横排还是竖排?

j=2,即行变列,竖排。

>>>a.transpose((2,0,1))
array([[[ 0,  4],
        [ 8, 12]],

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

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

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

老规矩,先把原数组所有“片”的列拿出来当作新的“片”,那么老问题,竖排还是横排?

j=0,意思就是原“片”中的数据必须是“行”,所以横排。

posted @ 2020-12-13 09:39  JohnYang819  阅读(450)  评论(0编辑  收藏  举报