如何理解numpy的数组,transpose,swapaxes(图形化)

在研究numpy的时候发现数组是一个很抽象的概念,毕竟远离数学多年,其转置和换轴更是不知所谓了。所以花了一些时间通过画图搞清楚了一些东西。

数组在三维空间的表示方法

两轴数组

arr2 = numpy.arange(8).reshape(2, 4)
#结果
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

在坐标轴上表示应该为:

如果用transpose转置 或者用swapaxes换轴

arr2.transpose((1, 0))
arr2.swapaxes(1, 0)
#结果 array([[0, 4],
       [1, 5],
       [2, 6],
       [3, 7]])

坐标中表示为
在这里插入图片描述
实质为将原0轴方向的每组数据,变换成横轴表示,也就是说横纵轴进行了互换。如果不太理解可以看轴箭头方向的数值个数。例如:右图中的0轴沿着箭头方向仍然是4个数值,即为原来的左图的1轴。或者你可以自己画一下转换一下查看的方向,一目了然。

这里要说明一下transpose和swapaxes参数不同,transpose要将所有的轴都列出来,哪两个轴互换就把轴索引换一下,
例如:三维数组里0,1轴互换或者0,2轴互换应该写成:

transpose((1,0,2))
transpose((2,1,0)) 

如果用swapaxes应该写成:

swapaxes(1,0)
swapaxes(2,0)

三轴数组

那么如果是三轴的数组又该怎么理解呢

arr1 = arr1.reshape(2, 2, 4)
#结果
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])
arr1.ndim#轴数
#结果3

画图表示为
在这里插入图片描述
这里的轴的编号已经通过程序测试过,通过图中可以看到,是两个两轴的数组通过0轴建立了关系,在这张图中0轴是固定轴,即只有一个0轴,1,2轴可以有多个,也就是说如果再有1维数据或者多维,只需要在0轴上再多画上1,2轴在平面上写上数组的数值就可以了。

接下来就要进行转置和换轴操作了,
我们先从简单的来
1 2轴的互换,这个很好理解,1,2轴在一个平面,如果互换跟上面的两轴数组是一个道理。

arr1.transpose((0, 2 ,1))
#或者
arr1.swapaxes(2,1)
#结果
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

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

在这里插入图片描述
是不是跟两轴的数组一样呢?因为1,2轴在同一个平面,只需要各回各家各找各妈自己的1,跟自己的2 换就可以了。

下面就稍微一丢丢的需要理解了,当然我能明白的,你们肯定能,因为我笨,而且,还是文科生。
这回咱们来换0 和1轴
还记得上面说的固定轴吗,0原本是固定轴,1轴和2轴都是可以有多个的,我们叫他活动轴。现在互换也就是让1变成固定轴,0变成和2一样的活动轴。即转置或换轴后,原1轴只有一个,原0和2可以有多个轴。

arr1.transpose((1, 0 ,2))
或者
arr1.swapaxes(1,0)
#结果
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

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

在这里插入图片描述
这张图我用原数组在图中的结构做了辅助线作为解释,轴号都是原数组的轴号,
红虚线标出的1号轴可当不存在,0号轴变成了活动轴可以有多个,所以2号轴要配合0号轴做一条新的2号轴(2号轴也可以有多个不违反规则),这样就组成了上下两个平面,每个平面上的数值就是数组的结果。

下面我们再来转置或换轴一下0和2号轴

arr1.transpose((2, 1, 0))
或者
arr1.swapaxes(2, 0)
#结果
array([[[ 0,  8],
        [ 4, 12]],

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

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

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

在这里插入图片描述
这里还是用原数组图来说明问题,这个大家对电脑都很熟悉,机箱里你的交火显卡不就是这么排列的咩,每个平面上的4个数值就成了一组。2轴成为了固定轴,1和0轴成为了活动轴,可以有多个。
因此,如果跟0轴进行转置和换轴,实质为固定轴和活动轴的交换,而,1和2轴的转置和换轴,其实为两轴数组的交换。

图画的很烂,望见谅,如果有任何错误,请指正,不胜感激。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值