项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
1.axis参数
在numpy与pandas,以及各种涉及到数值计算的类库中,都会有axis这个参数。这个参数非常重要,初学者理解起来比较困难,如果按二维矩阵中行列的概念去理解会比较难理解。今天咱们用另外一种角度去理解axis参数,比较清晰更容易理解。
2.二维的情况
先看一个例子
data = pd.DataFrame([[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]], columns=['c1', 'c2', 'c3', 'c4'], dtype=int)
这个dataframe为
c1 c2 c3 c4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
print data.mean(axis=0)
沿着axis=0的方向求平均值,最终的结果是
c1 2.0
c2 2.0
c3 2.0
c4 2.0
如果沿着axis=1的方向球平均值,最终结果为
0 1.0
1 2.0
2 3.0
原始数组的维度为3*4。axis=0,相当于是拿掉外层的括号,消灭了"行"的维度,然后对第一列,第二列,第三列,第四列各自求平均。最后求平均值的结果就是消灭了最外层的维度,也就是3这个维度,剩下的结果是一个4维的向量。
同理,如果 axis=1,相当于拿掉的是里层的括号,消灭了"列"的维度,然后对每一行各自求平均。最后的结果就是消灭了里层的维度,也就是4这个维度,剩下的结果是一个3维的向量。
print data.drop('c4', axis=1)
上面drop的逻辑,同理是沿着内层的括号进行操作。最终是内层的维度被drop掉了一列,得到一个3*3的矩阵,结果如下
c1 c2 c3
0 1 1 1
1 2 2 2
2 3 3 3
3.多维情况
再看一个多维的情况
data = np.arange(24).reshape(2, 3, 4)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
这个多维数组的维度是 2 ∗ 3 ∗ 4 2*3*4 2∗3∗4,同样我们来做一下求平均操作
print data.mean(axis=0)
按照上面的理解, axis=0是最外层的括号。最终得到的结果维度为3*4。
[[ 6. 7. 8. 9.]
[10. 11. 12. 13.]
[14. 15. 16. 17.]]
具体的计算逻辑为:我们要消灭的维度为2,所以参与计算的元素是两个,比如6这个值,是0与12求平均的结果,结果矩阵b中b[0][0]是a[0][0][0]与a[1][0][0]求平均的结果!
print data.mean(axis=1)
要消灭的维度为3,参与计算的元素是3个,最后的结果是2*4。
[[ 4. 5. 6. 7.]
[16. 17. 18. 19.]]
结果矩阵b[0][0]是a[0][0][0]+a[0][1][0]+a[0][2][0]平均的结果
print data.mean(axis=2)
结果如下
[[ 1.5 5.5 9.5]
[13.5 17.5 21.5]]
具体分析过程与前面类似,就不再重复。