1.argmax和max函数区别
argmax()返回的是函数取到最大值时的参数t,也就是说返回最大值的索引
max返回的是函数的最大值
2.axis=0/axis=1/axis=-1的区别
我们考虑它们的时候千万不要用行和列的思想去考虑axis,因为行和列是没有方向的。
根据官方的说话,axis=1表示数组的变化是横向的,而体现出来的是列的增加或者减少。也就是说如果对于axis=1,求平均的话,那么是从左到右横向求平均,而axis=0的话就是纵向求平均,只是方向发生了改变而已。
对于axis=-1,如果在二维数组中,axis=-1就是和axis=1是一样的,指向的是倒数第一个
原始矩阵的shape=[3,4,5],取axis=0再进行操作后,得到的矩阵shape=[4,5]。同样的,取axis=1再进行操作后,得到的矩阵shape=[3,5]。取axis=-1(axis=2)再操作后,shape=[3,4]。掌握这一点,能有利于你在神经网络中的变换或是数据操作中明确矩阵变换前后的形状,从而加快对模型的理解。
3.具体代码分析
—3.1一维数组
具体代码
import numpy as np
n = np.arange(5)
a = np.argmax(n)
b = np.max(n)
print(n)
print(a)
print(b)
ar = np.array([1,3,2,5,4])
d = np.argmax(ar)
e = ar.argmax(axis=0)
print(ar)
print(d)
print(e)
运行结果
从一维数组中不太明显能够看出这三者的区别,从二维和三维就更容易理解了。
—3.2二维数组
具体代码:
**import numpy as np
# a = np.arange(6).reshape([3,2])
a = np.array([[2,3],[5,4],[0,1]])
b = np.argmax(a) # 没有参数时,是默认将数组展平
c = np.argmax(a,axis=0) # 从垂直方向看,2,5,0为一排,其中最大的是5,也就是说5的索引为1;3,4,1返回为1也是一样的道理
d = np.argmax(a,axis=1) # 从水平方向看,2和3是3更大些,所以返回为1;5和4是5更大,返回为0;0和1是1更大,返回为1
e = np.argmax(a,axis=-1) # 二维数组的axis=-1相当于axis=1,表示的是倒数第一个
print(a)
print(b)
print(c)
print(d)
print(e)**
- axis=0,从垂直方向看,2,5,0为一排,其中最大的是5,也就是说5的索引为1;3,4,1返回为1也是一样的道理
- axis=1,从水平方向看,2和3是3更大些,所以返回为1;5和4是5更大,返回为0;0和1是1更大,返回为1
- 二维数组的axis=-1相当于axis=1,表示的是倒数第一个
- 这里其实表示就很清楚了,也就是不同方向指向最大的值的索引。
—3.3三维数组
具体代码
import numpy as np
a = np.arange(24).reshape([4,3,2]) # 打印形状,可以理解为长为4,宽为3,通道数为2的图片。
b = a[:,:,0] # 第0通道
c = a[:,:,1] # 第1通道
print("原矩阵\n",a)
print('第0通道\n',b)
print('第1通道\n',c)
运行结果
这个三维数组,可以把它理解为两张大饼叠在一起,或是两个图层叠在一起。根据两个不同的通道叠加在一起就形成了这个三维数组。下面是axis不同的值的代码结果
具体代码
import numpy as np
a = np.arange(24).reshape([4,3,2]) # 打印形状,可以理解为长为4,宽为3,通道数为2的图片。
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('原矩阵\n',a)
print('axis=0\n',b)
print('axis=1\n',c)
print('axis=-1\n',d)
print('axis=2\n',e)
运行结果
注意这里的axis=-1(和axis=2相同,因为是最后一位))返回的是最大的通道数的索引,对应位置进行比较很明显channel1每一位置都比channel0更大,所以这里面每一位置都返回的是1,也就是通道1的索引。看下图更具体
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3d32d95263595ecb3d61a84cd9e250b0.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ba281943882d4572e2a4894402c14d3.png)
若想改变某个通道里的一个数字可用a[0,0,0] = 100(注意这里改变的是0通道的值)
原矩阵就变成了
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0055d8a20f4a1b30e5d5dd3dcf073ce3.png)
所以此时1通道的1肯定比0通道的100更小,毋庸置疑通过axis=-1返回的值肯定为0.下面是运行的结果。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3cdddfc3e5a74437481178762c7f2fa2.png)
不错正合我意!!!
创作不易,喜欢请点赞收藏关注,让我知道你曾经来过~