声明:本文档为个人笔记,参考了网上相关博客内容
这是我参考的链接: link.
#Numpy操作中的axis
首先为什么会有axis这个概念?
因为在numpy模块中,大多数处理的是矩阵或者多维数组,同时,对多维数组或者矩阵的操作有多种可能,为了帮助实现对数组或矩阵各种各样的功能,就有了axis
下面举个例子,选取不同的axis,对二维数组进行sum,mean,min,max的操作
import numpy as np
>>>arr=np.arange(16).reshape(2,4,2)
>>>arr
array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11],
[12, 13],
[14, 15]]])
接下来是各种sum,mean,min,max操作
以sum方法为例:
>>> arr.sum(axis=0)
array([[ 8, 10],
[12, 14],
[16, 18],
[20, 22]])
>>> arr.sum(axis=1)
array([[12, 16],
[44, 48]])
>>> arr.sum(axis=2)
array([[ 1, 5, 9, 13],
[17, 21, 25, 29]])
通过以上可以发现,通过指定不同的axis,numpy会沿着不同的方向进行操作,如果不设置,则表示对所有的元素进行操作,如果axis=0,则沿着纵轴进行操作,若axis=1则沿着横轴进行操作。但是这只是仅仅对于二维数组而言。但是可以总结为一句话:设axis=i ,则numpy沿着第i个下标变化的方向进行操作,
下面举个三维数组的例子来说明这个道理: 当axis=0时,
>>> arr=np.arange(16).reshape(2,4,2)
>>> arr
array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7]],
[[ 8, 9],
[10, 11],
[12, 13],
[14, 15]]])
>>> arr.sum(axis=0)
array([[ 8, 10],
[12, 14],
[16, 18],
[20, 22]])
以上例子中,axis=0,首先来看一下,arr的0轴在哪里,arr的shape为(2,4,2),arr的shape下标为(0,1,2),**则axis=0对应于数组shape下标的的第一个位置。那么第一个位置的变化方向有几个呢,就要看shape下标对应的数值了,为2,**那我们列举这两个变化的方向
000->100 , 001->101 # 仅第一个数字改变
010->110 , 011->111
020->120 , 021->121
030->130 , 031->131
所以将以上两两变化的下标对应的数字进行sum就好了,就得到了上述的结果。
当axis=1时
000->010->020->030 # 仅第二个数字改变
001->011->021->031
100->110->120->130
101->111->121->131
得到:
>>> arr.sum(axis=1)
array([[12, 16],
[44, 48]])