Python中axis=0/1问题的解析
来源:互联网 发布:九次方大数据公司老板 编辑:程序博客网 时间:2024/05/06 05:48
在Python中对数组或者矩阵进行运算时,常常会碰到axis=0/1这个参数的问题。简单来说,它表示的是数组沿着多维数组中的某条轴进行运算。但是由于我们不太清楚这里面的深层原因,常常会将轴的概念弄混淆。
在Python中,轴是比较难懂的概念,我们先从坐标轴说起:
n 维空间里有 n 个坐标轴,并且坐标轴互相垂直,每一个点相对于一条坐标轴都有唯一的一个坐标值。
对同一条坐标轴来说,坐标值相同的点在同一个 n-1 维的“平面”上。任意取这样一个“平面”,我们就能定义“同一个坐标轴上的点”,同一个坐标轴上的点组成的线是与坐标轴平行的。
而所谓的延轴计算实际上是降维的过程,同一个坐标轴上的点合并成一个点,这样n维空间就变成了 n-1 维空间。
具体到 numpy 中的多维数组来说,轴即是元素坐标的索引。比如,第0轴即是第1个索引,延0轴计算就是去掉坐标中的第一个索引。过程就是:
- 遍历其他索引的所有可能组合
- 取出一个组合,保持值不变,遍历第一个索引所有可能值
- 根据索引可以获得了同一个轴上的所有元素
- 对他们进行计算得到最后的元素
- 所有组合的最后结果组到一起就是最后的 n-1 维数组
沿轴计算的过程,可以当做沿哪一个方向进行投影再进行计算。所以如果一个多维数组的 shape 是 (a1, a2, a3, a4), 那么延轴0计算最后的数组shape 是 (a2, a3, a4), 延轴1计算最后的数组shape是 (a1, a3, a4),延轴2计算最后的数组shape是(a1,a2,a4),延轴3计算最后的数组shape是(a1,a2,a3),如下代码所示:
>>> a = array([[[1,1],[2,1],[3,1]],[[4,1],[5,1],[6,1]],[[7,1],[8,1],[9,1]]])>>> a.shape(3, 3, 2)>>> aarray([[[1, 1], [2, 1], [3, 1]], [[4, 1], [5, 1], [6, 1]], [[7, 1], [8, 1], [9, 1]]])>>> sum(a, axis=0)array([[12, 3], [15, 3], [18, 3]])>>> sum(a, axis=1)array([[ 6, 3], [15, 3], [24, 3]])>>> sum(a, axis=2)array([[ 2, 3, 4], [ 5, 6, 7], [ 8, 9, 10]])
Stack overflow解答
在Stackoverflow上面也有关于这个问题的解答,翻译如下:
Stackoverflow问题如下:
python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列?考虑以下代码:
>>>df = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], \columns=["col1", "col2", "col3", "col4"])>>>df col1 col2 col3 col4 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3
如果我们调用df.mean(axis=1),我们将得到按行计算的均值
>>> df.mean(axis=1)0 11 22 3
然而,如果我们调用 df.drop((name, axis=1),我们实际上删掉了一列,而不是一行:
>>> df.drop("col4", axis=1) col1 col2 col30 1 1 11 2 2 22 3 3 3
Can someone help me understand what is meant by an “axis” in pandas/numpy/scipy?
有人能帮我理解一下,在pandas、numpy、scipy三都当中axis参数的真实含义吗?
投票最高的答案揭示了问题的本质:
其实提问者理解axis有问题,df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值。也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词。
换句话说:
- 使用0值表示沿着每一列或行标签\索引值向下执行方法
- 使用1值表示沿着每一行或者列标签模向执行对应的方法
下图代表在DataFrame当中axis为0和1时分别代表的含义:
另外,记住,Pandas保持了Numpy对关键字axis的用法,用法在Numpy库的词汇表当中有过解释:
轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
所以问题当中第一个列子 df.mean(axis=1)代表沿着列水平方向计算均值,而第二个列子df.drop(name, axis=1) 代表将name对应的列标签(们)沿着水平的方向依次删掉。
- Python中axis=0/1问题的解析
- axis=1和axis=0的问题
- Python中的axis=0,axis=1
- python中的axis=0和axis=1
- Python中的axis=0,axis=1
- python中axis的作用
- Python中的axis=0,axis=1/sum函数.sum(axis=1)
- numpy,pandas中的axis=0 ,axis=1的问题
- python axis解析
- python中array.sum(axis=?)的用法
- python中array.sum(axis=?)的用法
- pandas 中对axis=0,axis=1的理解,对应pandas中drop的用法
- python numpy中axis的含义
- 在weblogic8.1中部署axis 应用出现的问题
- python: sum 函数 --sum(axis=1)
- python--sum函数--sum(axis=1)
- python sum([],axis=)
- Python Pandas与Numpy中axis参数的二义性
- M
- 【数据结构】矩阵!!
- 关于html文件转换成jsp文件之后的样式改变的问题
- Android AccountManager帐号管理(二)
- PyCharm,IDEA激活服务器失效
- Python中axis=0/1问题的解析
- 走进平天山
- 随笔
- 运行response语句时,报requests.exceptions.ProxyError
- JUDE – community下载
- 我想要一个积分
- SSE图像算法优化系列十二:多尺度的图像细节提升。
- cocos2d-x响应机顶盒遥控器
- java内部类