首页 > 编程 > Python > 正文

关于Python Numpy array 的axis 的用法的总结

2019-11-08 02:56:47
字体:
来源:转载
供稿:网友

我自己学习numpy已经很长时间了, 但一直搞不懂它array里面axis的用法 经常就是自己试一下看看axis=0 或者 axis=1 的时候会怎么样 然后再用到代码里面, 比如:

首先导入numpy和创建一个array

>>> import numpy as np>>> a = np.array([[1,2],[10,20]])>>> aarray([[ 1, 2], [10, 20]])

试试看当axis=0的时候平均值的输出:

>>> a.mean(axis=0)array([ 5.5, 11. ])

aixs=1的时候平均值的输出:

>>> a.mean(axis=1)array([ 1.5, 15. ])

看似规律就是axis=0时是按照来求平均而当axis=1时是按照来求平均值的。 但是这种方法很难应用到高维的array中去:

>>> b = np.array([[[1,2,3],[4,5,6],[7,8,9]]])>>> barray([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])>>> b.shape(1, 3, 3)>>> b.mean(axis=0)array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]])>>> b.mean(axis=1)array([[ 4., 5., 6.]])

可以看出当数组的形状为(1,3,3) axis=1时并不是按照行来求平均值的, 而且axis=0时的结果就是形状为(3,3) 数值就是它本身的数组。 以上我们就可以总结出:

axis的数值是和数组的形状有关的。如果axis=0, 则就按照最外面的那层array计算平均值; 如果axis=1, 则就按倒数第二层的array计算平均值, 以此类推。那么我们就可以推导:既然上面的b数组是三维的形状(1,3,3) 那么就有axis=2,而且结果就是最里面那3行每行的平均值:>>> b.mean(axis=2)array([[ 2., 5., 8.]])

但是由于b只有三维(python从0开始index形状), 当我们用axis=3时,就会有错误:

>>> b.mean(axis=3)Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/jinjunjie/anaconda/lib/python2.7/site-packages/numpy/core/_methods.py", line 56, in _mean rcount = _count_reduce_items(arr, axis) File "/Users/jinjunjie/anaconda/lib/python2.7/site-packages/numpy/core/_methods.py", line 50, in _count_reduce_items items *= arr.shape[ax]IndexError: tuple index out of range

英文还可以的同学看看这个和这个应该会有更深刻的理解.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表