Numpy、TensorFlow和Keras函数输入参数axis理解(一)
2017-12-26 19:25
453 查看
在利用numpy、TensorFlow和Keras等进行编程时,经常发现很多函数携带axis参数,且具有相同功能的函数的axis(轴)参数取值范围可能不同(操作方式也不一样),从而引起一些困惑。针对这一问题,归纳总结如下:
当numpy函数不指定axis的值时,表示函数对所有元素进行操作;
当numpy函数指定axis的值时,表示函数沿着指定的axis轴方向进行操作;
下面给出列举一些实例:
np.sum(a, axis=None, dtype=None, out=None, keepdims=False)
函数作用:
求给定的axis轴上的数组元素之和
np.argmax(a, axis=None, out=None)
函数作用:
沿着axis轴返回最大值的索引
* 总结:*
根据上述试验发现,在axis的区间为[-2,2),axis的取值虽然可以不同,但是实际的效果却存在相同的情况,即
axis = -2 对应 axis = 0,效果一致;
axis = -1 对应 axis = 1,效果一致;
concatenate((a1, a2, …), axis=0)
函数作用:
沿着已有的axis轴,对数组进行合并
总结:
在numpy中还有很多函数中存在axis输入参数,比如np.mean()、np.max()、np.min()等函数,其对于的axis理解方式跟上述案例完全一致。
1. Numpy函数中的axis参数理解
在Numpy中,axis的不同取值对应着numpy array的不同维度,通常取值范围是[-rank(input),rank(input))。比如,二维数组A = np.array([[1,2],[3,4]]),那么数组A的0轴(axis = 0)表示对应着A的第一维方向(纵轴),数组A的1轴(axis = 1)表示对应着A的第二维方向(横轴)。通过在numpy函数的输入参数中指定axis值,可以控制函数沿着axis轴指定的方向进行操作:当numpy函数不指定axis的值时,表示函数对所有元素进行操作;
当numpy函数指定axis的值时,表示函数沿着指定的axis轴方向进行操作;
下面给出列举一些实例:
1.1 案例1——np.sum()
函数原型:np.sum(a, axis=None, dtype=None, out=None, keepdims=False)
函数作用:
求给定的axis轴上的数组元素之和
import numpy as np A = np.array([[1,2],[3,4]]) sum0 = np.sum(A, axis=0) #沿着0轴求和 ,也就是与0轴平行的方向求和(按列求和) sum1 = np.sum(A, axis=1) #沿着1轴求和,也就是与1轴平行的方向求和(按行求和) sum2 = np.sum(A) print("输入矩阵:") print(A) print("沿着0轴求和(按列,axis = 0):",sum0) print("沿着1轴求和(按行,aixs = 1):",sum1) print("所有元素的和(axis = none):",sum2)
输入矩阵: [[1 2] [3 4]] 沿着0轴求和(按列,axis = 0): [4 6] 沿着1轴求和(按行,aixs = 1): [3 7] 所有元素的和(axis = none): 10
1.2案例2——np.argmax()
函数原型:np.argmax(a, axis=None, out=None)
函数作用:
沿着axis轴返回最大值的索引
import numpy as np A = np.random.random((3,4)) print("输入数组:") print(A) B = np.argmax(A,axis = 0) C = np.argmax(A,axis = 1) D = np.argmax(A,axis = -1) E = np.argmax(A,axis = -2) print("沿着0轴寻找最大值,并返回其索引:",B) print("沿着1轴寻找最大值,并返回其索引:",C) print("沿着-1轴寻找最大值,并返回其索引:",D) print("沿着-2轴寻找最大值,并返回其索引:",E)
输入数组: [[ 0.84279837 0.19618695 0.78035449 0.17604155] [ 0.61023773 0.13680776 0.34354893 0.63371117] [ 0.36884615 0.51836158 0.15862349 0.17267713]] 沿着0轴寻找最大值,并返回其索引: [0 2 0 1] 沿着1轴寻找最大值,并返回其索引: [0 3 1] 沿着-1轴寻找最大值,并返回其索引: [0 3 1] 沿着-2轴寻找最大值,并返回其索引: [0 2 0 1]
* 总结:*
根据上述试验发现,在axis的区间为[-2,2),axis的取值虽然可以不同,但是实际的效果却存在相同的情况,即
axis = -2 对应 axis = 0,效果一致;
axis = -1 对应 axis = 1,效果一致;
1.3 案例3——np.concatenate()
函数原型:concatenate((a1, a2, …), axis=0)
函数作用:
沿着已有的axis轴,对数组进行合并
import numpy as np A_1 = np.array([[1,2],[4,5]]) A_2 = np.zeros((2,2)) print("输入数组A_1:") print(A_1) print("输入数组A_2:") print(A_2) B = np.concatenate((A_1,A_2),axis = 0) C = np.concatenate((A_1,A_2),axis = 1) print("沿着0轴方向合并数组(垂直合并):\n",B) print("沿着1轴方向合并数组(水平合并):\n",C)
输入数组A_1: [[1 2] [4 5]] 输入数组A_2: [[ 0. 0.] [ 0. 0.]] 沿着0轴方向合并数组(垂直合并): [[ 1. 2.] [ 4. 5.] [ 0. 0.] [ 0. 0.]] 沿着1轴方向合并数组(水平合并): [[ 1. 2. 0. 0.] [ 4. 5. 0. 0.]]
总结:
在numpy中还有很多函数中存在axis输入参数,比如np.mean()、np.max()、np.min()等函数,其对于的axis理解方式跟上述案例完全一致。
相关文章推荐
- Numpy、TensorFlow和Keras函数输入参数axis理解(二)
- numpy.concatenate 中的axis参数怎么理解
- Python Pandas与Numpy中axis参数的二义性
- Python Pandas与Numpy中axis参数的二义性
- Tensorflow学习教程------模型参数和网络结构保存且载入,输入一张手写数字图片判断是几
- Tensorflow的MNIST进阶教程CNN网络参数理解
- [转载]Tensorflow 的reduce_sum()函数的axis,keep_dim这些参数到底是什么意思?
- Python之NumPy(axis=0/1/2...)的透彻理解——通过np.sum(axis=?)实例进行说明
- TensorFlow下的MNIST关键原理与参数理解
- 如何理解numpy多维数组与Tensorflow张量中的axis概念
- Python Pandas与Numpy中axis参数的二义性
- CNN的超参数 & 宽卷积和窄卷积的理解及tensorflow中的实现
- numpy中axis的一些理解
- 利用numpy数组保存TensorFlow模型的参数
- 深入理解主函数main()的输入参数及返回值问题
- 对于LSTM输入层、隐含层及输出层参数的个人理解
- numpy中axis理解
- numpy 函数里面的axis参数的含义
- Python Pandas与Numpy中axis参数的二义性
- Python Pandas与Numpy中axis参数的二义性