Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码

简介: 本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。

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的索引。看下图更具体

在这里插入图片描述
在这里插入图片描述
若想改变某个通道里的一个数字可用a[0,0,0] = 100(注意这里改变的是0通道的值)
原矩阵就变成了
在这里插入图片描述
所以此时1通道的1肯定比0通道的100更小,毋庸置疑通过axis=-1返回的值肯定为0.下面是运行的结果。
在这里插入图片描述
不错正合我意!!!
创作不易,喜欢请点赞收藏关注,让我知道你曾经来过~

目录
相关文章
|
2天前
|
Python
Numpy学习笔记(一):array()、range()、arange()用法
这篇文章是关于NumPy库中array()、range()和arange()函数的用法和区别的介绍。
13 6
Numpy学习笔记(一):array()、range()、arange()用法
|
2天前
|
索引 Python
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
NumPy库中`np.where`和逻辑运算函数`np.logical_and`、`np.logical_or`、`np.logical_not`的使用方法和示例。
12 1
Numpy学习笔记(三):np.where和np.logical_and/or/not详解
|
2天前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
11 1
|
2天前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
8 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
4月前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
2月前
|
vr&ar 索引 Python
Numpy学习笔记之Numpy练习
Numpy学习笔记之Numpy练习
|
2月前
|
存储 机器学习/深度学习 索引
Numpy学习笔记
Numpy学习笔记
|
4月前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
Python
浅谈NumPy中的维度Axis
NumPy中的维度是一个很重要的概念,很多函数的参数都需要给定维度Axis,如何直观的理解维度呢?我们首先以二维数组为例进行说明,然后推广到多维数组。 (有人将ndim属性叫维度,将axis叫轴,我还是习惯将axis称之为维度,axis=0称为第一个维度)
75 0
  浅谈NumPy中的维度Axis
|
SQL Java Go
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
【Python】【Numpy+Pandas数据处理·闯关】和鲸社区学习笔记day(1)
331 0