引言
在使用Python语言进行数据分析和机器学习的时候,常常需要对类似pd.core.frame.DataFrame或者np.ndarray的对象进行操作.
在二维情况下,例如对于ndim=1的np.ndarray,我们需要对其进行纵向堆叠.我们可以使用vstack()函数(v是vertical之意,同理,水平方向堆叠就是用hstack()).
但如果用stack()函数呢?axis的参数是0还是1呢?
样例
以numpy.ndarray为例子:
narr = np.arange(6).reshape(2,3)
# array([[0, 1, 2],
# [3, 4, 5]])
# 例1
np.stack([narr, narr], axis=0)
# array([[[0, 1, 2],
# [3, 4, 5]],
# [[0, 1, 2],
# [3, 4, 5]]])
# 例2
np.max(narr, axis=0)
# array([3, 4, 5])
# 例3
np.sum(narr, axis=1)
# array([ 3, 12])
解析
从方括号向内看,一层一层打开方括号.方括号由外向内,对应"维"的序号就是0,1,2,…,n.
axis参数的数值,就对应了我们准备破开哪个维度.请看例1,我们选择"破开"axis=0,即最外层的维度.那么我们就不能伤及里面的维度,所以我们是将narr的外层破开之后将内层的维度进行了堆叠.
例2和例3也类似,分别把第0和第1个维度给"破开"了.
一下还有一个简单的例子帮助理解:
h_arr = np.arange(24).reshape(2, 3, 4)
# array([[[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]],
# [[12, 13, 14, 15],
# [16, 17, 18, 19],
# [20, 21, 22, 23]]])
np.median(h_arr, axis=1).shape
# (2, 4)
可以直观看到,axis所指的那个维度被"干掉了".
结语
以上就是对axis的一个理解,不过pandas的数据结构还没在本文中设计,等有空再来填坑,先拜拜了~