很久之前就学习了numpy,但是最近在使用的过程中,突然蒙蔽了,以前就是对于二位、三维数据的记忆,如果忘记了,测试一下就知道了,但是内心无法接受,所以决定再仔细的研究一番,经过很多资料的学习终于让我剔骨灌顶,希望可以帮到路过的人,这里均采用实例讲解。
一、shape
比如:a=np.array([[[1,2,3],[2,3,4]],[[2,3,4],[1,2,1]]])
首先要知道在numpy的array中任何数据都有一个最外层的[ ],先看a最左边有几个[ , 有三个,做所以这是一个三维数组,设为(a,b,c),我们再看a,从最外层的[]看起,这个最外层的[]包起来的数据,可以看出用了[]包起来,所以a=2,再看里面两个中的一个[],这个[]里面的数据也用了两个[],所以b=2,接着看内嵌这两个中的一个[],里面有三个数据,c=3,所以a.shape=(2,2,3),如下图:
计算shape总结:元数据从外[]向内看,shape从左到右计算
二、axis
还是如:a=np.array([[[1,2,3],[2,3,4]],[[2,3,4],[1,2,1]]]),a.shape=(2,2,3),维度对应的下标为(0,1,2) 其中0维->1, 1->2 , 2->3
以sum为例,先记住:axis=几,几对应的shape就消失,如axis=0,之后的shape为(2,3);axis=2,则变成(2,2)
对于a我们来看一下他有哪些下标:(共2*2*3=12个)
000,001,002
010,011,012
100,101,102
110,111,112
一共12个,如a[1][1][1]是2
计算sum的时候,如果axis=0,axis=0对应于数组shape下标的的第一个位置。那么第一个位置的变化方向有几个呢,就要看shape下标对应的数值了,为2,也就是说它是0或者1,那我们列举这两个变化的方向(找第一个维度数据变化,其他维度的数据不变的小标,比如000和100,001和101),按照一定规律找,可以列出如下:共8对
000->100 , 001->101
010->110 , 011->111
020->120 , 021->121
030->130 , 031->131
最后将以上两两变化的下标对应的数字进行sum就好了,就得到了结果。即是a[0][0][0]+a[1][0][0]=1+2=3,.......
根据维度结构得到(2,3)维的数据了。
以上,希望可以给在这一块迷惑的人一种帮助,谢谢,如果有错请指出!我一定会虚心学习,感谢!