我自己学习numpy已经很长时间了, 但一直搞不懂它array里面axis的用法 经常就是自己试一下看看axis=0 或者 axis=1 的时候会怎么样 然后再用到代码里面, 比如:
首先导入numpy和创建一个array
>>> import numpy as np
>>> a = np.array([[1,2],[10,20]])
>>> a
array([[ 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]]])
>>> b
array([[[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
英文还可以的同学看看这个和这个应该会有更深刻的理解.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)