iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入理解numpy中argmax的具体使用
  • 268
分享到

深入理解numpy中argmax的具体使用

2024-04-02 19:04:59 268人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、基本介绍二、代码实验1、一维数组情况1.1、axis=01.2、axis=12、二维数组情况2.1、axis=02.2、axis=13、三维数组情况3.1、axis=03.2

一、基本介绍

numpy中的argmax简而言之就是返回最大值的索引,当使用np.argmax(axis),这里方向axis的指定往往让人不理解。
简而言之:这里axis可以让我们从、或者是深度方向来看一个高维数组。

二、代码实验

1、一维数组情况

在这里插入图片描述

简单一维情况,np.argmax()直接返回最大值的索引不指定axis可以认为是将数组拉平之后寻找最大值的索引

1.1、axis=0

当我们指定axis=0时,其实是在中作比较,寻找最大的的索引

在这里插入图片描述

当然对于这个一维情况没有什么影响。

1.2、axis=1

在这里插入图片描述

当我们指定axis=1的时候报错了,这是因为我们的a是一维数组,没有axis=1这个轴,可见当我们使用np.argmax()时axis的指定不能超过所需要排序的数组

2、二维数组情况

在这里插入图片描述

不指定axis就是相当于把二维数组拉平,直接选取最大值的索引

2.1、axis=0

在这里插入图片描述

指定axis=0就是比较,返回索引中的最大值

在这里插入图片描述

我们改写一个b中的元素,我们期望的结果是[2,2,1,2]

在这里插入图片描述

实际结果和我们期望相符合

2.2、axis=1

在这里插入图片描述

指定axis=0就是比较,返回索引中的最大值

3、三维数组情况

一个三维数组可以视作一张图片,它的三个维度分别为(high, width, channels) 分别表示图像的高、宽、通道数(深度)。常见的彩色图像都有三个通道,我们以常见的RGB图像为例构建一个数组。

在这里插入图片描述

直接使用np.argmax(),就是之间将三维数组拉平,寻找最大值的索引

3.1、axis=0

单独查看c的三个通道的数据,如图所示

在这里插入图片描述

对于三个通道取axis=0意味分别比较列返回行的最大值索引

在这里插入图片描述

我们期望的返回值应该是[[1,1,1,],[1,1,1],[1,1,1]],实际的结果和我们的期望一致

在这里插入图片描述

3.2、axis=1

在这里插入图片描述

对于三个通道取axis=1意味分别比较行返回列的最大值索引

我们期望的结果是[[2, 2, 2],[2, 2, 2],[2, 2, 2],[2, 2, 2]],,实际的结果和我们的期望一致

在这里插入图片描述

3.3、axis=2

取axis=2意味着我们从图像的深度方向(通道方向)来进行比较,可以认为三个数组的叠在一起的,分别对应channel0,channel1,channel2而我们取最大值的索引就是返回对应pixel像素所在的通道索引

在这里插入图片描述

c的channel2所有的像素值均大于其他两个channel所有返回值应该是[[2,2,2,],[2,2,2,],[2,2,2,],[2,2,2,]],实际结果和我的期望一致

在这里插入图片描述

3.4、axis=-1

axis=-1即是反过来看轴,对于三维情况axis=-1axis=2一致

在这里插入图片描述

其他
对于二维情况axis=-1anxis=1一致
对于一维情况axis=0anxis=-1一致

四、Reference

https://blog.csdn.net/weixin_39190382/article/details/105854567

Https://www.cnblogs.com/zhouyang209117/p/6512302.html

PS:补充

1.对一个一维向量

import numpy as np
a = np.array([3, 1, 2, 4, 6, 1])
b=np.argmax(a)#取出a中元素最大值所对应的索引,此时最大值位6,其对应的位置索引值为4,(索引值默认从0开始)
print(b)#4

2.对2维向量(通常意义下的矩阵)a[][]

import numpy as np
a = np.array([[1, 5, 5, 2],
              [9, 6, 2, 8],
              [3, 7, 9, 1]])
b=np.argmax(a, axis=0)#对二维矩阵来讲a[0][1]会有两个索引方向,第一个方向为a[0],默认按列方向搜索最大值
#a的第一列为1,9,3,最大值为9,所在位置为1,
#a的第一列为5,6,7,最大值为7,所在位置为2,
#此此类推,因为a有4列,所以得到的b为1行4列,
print(b)#[1 2 2 1]
 
c=np.argmax(a, axis=1)#现在按照a[0][1]中的a[1]方向,即行方向搜索最大值,
#a的第一行为1,5,5,2,最大值为5(虽然有2个5,但取第一个5所在的位置),索引值为1,
#a的第2行为9,6,2,8,最大值为9,索引值为0,
#因为a有3行,所以得到的c有3个值,即为1行3列
print(c)#[1 0 2]

3.对于三维矩阵a[0][1][2],情况最为复制,但在lstm中应用最广

import numpy as np
a = np.array([
              [
                  [1, 5, 5, 2],
                  [9, -6, 2, 8],
                  [-3, 7, -9, 1]
              ],
 
              [
                  [-1, 7, -5, 2],
                  [9, 6, 2, 8],
                  [3, 7, 9, 1]
              ],
            [
                  [21, 6, -5, 2],
                  [9, 36, 2, 8],
                  [3, 7, 79, 1]
              ]
            ])
b=np.argmax(a, axis=0)#对于三维度矩阵,a有三个方向a[0][1][2]
#当axis=0时,是在a[0]方向上找最大值,即两个矩阵做比较,具体
#(1)比较3个矩阵的第一行,即拿[1, 5, 5, 2],
#                         [-1, 7, -5, 2],
#                         [21, 6, -5, 2],
#再比较每一列的最大值在那个矩阵中,可以看出第一列1,-2,21最大值为21,在第三个矩阵中,索引值为2
#第2列5,7,6最大值为7,在第2个矩阵中,索引值为1.....,最终得出比较结果[2 1 0 0]
#再拿出三个矩阵的第二行,按照上述方法,得出比较结果 [0 2 0 0]
#一共有三个,所以最终得到的结果b就为3行4列矩阵
print(b)
#[[0 0 0 0]
 #[0 1 0 0]
 #[1 0 1 0]]
 
c=np.argmax(a, axis=1)#对于三维度矩阵,a有三个方向a[0][1][2]
#当axis=1时,是在a[1]方向上找最大值,即在列方向比较,此时就是指在每个矩阵内部的列方向上进行比较
#(1)看第一个矩阵
                  # [1, 5, 5, 2],
                  # [9, -6, 2, 8],
                  # [-3, 7, -9, 1]
#比较每一列的最大值,可以看出第一列1,9,-3最大值为9,,索引值为1
#第2列5,-6,7最大值为7,,索引值为2
# 因此对第一个矩阵,找出索引结果为[1,2,0,1]
#再拿出2个,按照上述方法,得出比较结果 [1 0 2 1]
#一共有三个,所以最终得到的结果b就为3行4列矩阵
print(c)
#[[1 2 0 1]
 # [1 0 2 1]
 # [0 1 2 1]]
 
d=np.argmax(a, axis=2)#对于三维度矩阵,a有三个方向a[0][1][2]
#当axis=2时,是在a[2]方向上找最大值,即在行方向比较,此时就是指在每个矩阵内部的行方向上进行比较
#(1)看第一个矩阵
                  # [1, 5, 5, 2],
                  # [9, -6, 2, 8],
                  # [-3, 7, -9, 1]
#寻找第一行的最大值,可以看出第一行[1, 5, 5, 2]最大值为5,,索引值为1
#第2行[9, -6, 2, 8],最大值为9,,索引值为0
# 因此对第一个矩阵,找出行最大索引结果为[1,0,1]
#再拿出2个矩阵,按照上述方法,得出比较结果 [1 0 2 1]
#一共有三个,所以最终得到的结果d就为3行3列矩阵
print(d)
# [[1 0 1]
#  [1 0 2]
#  [0 1 2]]
###################################################################
#最后一种情况,指定矩阵a[0, -1, :],第一个数字0代表取出第一个矩阵(从前面可以看出a有3个矩阵)为
# [1, 5, 5, 2],
# [9, -6, 2, 8],
# [-3, 7, -9, 1]
#第二个数字“-1”代表拿出倒数第一行,为
# [-3, 7, -9, 1]
#这一行的最大索引值为1
 
# ,-1,代表最后一行
m=np.argmax(a[0, -1, :])
print(m)#1
 
#h,取a的第2个矩阵
# [-1, 7, -5, 2],
# [9, 6, 2, 8],
# [3, 7, 9, 1]
#的第3行
# [3, 7, 9, 1]
#的最大值为9,索引为2
h=np.argmax(a[1, 2, :])
print(h)#2
 
g=np.argmax(a[1,:, 2])#g,取出矩阵a,第2个矩阵的第3列为-5,2,9,最大值为9,索引为2
print(g)#2

到此这篇关于深入理解numpy中argmax的具体使用的文章就介绍到这了,更多相关numpy argmax内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 深入理解numpy中argmax的具体使用

本文链接: https://www.lsjlt.com/news/162430.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深入理解numpy中argmax的具体使用
    目录一、基本介绍二、代码实验1、一维数组情况1.1、axis=01.2、axis=12、二维数组情况2.1、axis=02.2、axis=13、三维数组情况3.1、axis=03.2...
    99+
    2022-11-12
  • numpy中nan_to_num的具体使用
    在Numpy中NaN值一般出现在数据清洗前,出现这个值说明这个数据是缺失的 在有些时候我们会选择直接删除这些数据,但有些时候这些数据是不能删除的,这个时候我们就需要使用一些方法将np...
    99+
    2022-11-11
  • 深入了解Rust 结构体的使用
    目录楔子定义并实例化结构体简化版的实例化方式基于已有结构体实例创建元组结构体没有字段的空结构体结构体数据的所有权使用结构体的示例程序楔子 结构体是一种自定义的数据类型,它允许我们将多...
    99+
    2022-11-13
    Rust 结构体使用 Rust 结构体
  • 深入理解vue的使用
    目录理解vue的核心理念探讨vue的双向绑定原理及实现vue双向绑定原理实现过程理解vue的核心理念 使用vue会让人感到身心愉悦,它同时具备angular和react的优点,轻量级...
    99+
    2022-11-12
  • 深入理解golangchan的使用
    目录前言见真身结构体发送数据接收数据上手定义发送与接收前言 之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php, j...
    99+
    2022-11-13
  • 深入理解JDK8中Stream使用
    概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行...
    99+
    2022-11-12
  • 深入理解PyTorch中的nn.Embedding的使用
    目录一、前置知识1.1 语料库(Corpus)1.2 词元(Token)1.3 词表(Vocabulary)二、nn.Embedding 基础2.1 为什么要 embedding?2...
    99+
    2022-11-11
  • 深入理解r2dbc在mysql中的使用
    简介 mysql应该是我们在日常工作中使用到的一个非常普遍的数据库,虽然mysql现在是oracle公司的,但是它是开源的,市场占有率还是非常高的。 今天我们将会介绍r2dbc在mysql中的使用。 r2dbc-m...
    99+
    2022-05-31
    mysql r2dbc
  • 深入理解Java中包的定义与使用
    目录包是什么?包的作用导入包中的类自定义包包的访问权限控制包是什么? 在开发过程中,会定义很多类,随着类越写越多,难免会出现类重名而发生覆盖的情况,为了在使用它们的时候不让编译器混淆...
    99+
    2022-11-12
  • 深入了解Vue3中props的原理与使用
    目录前言介绍原理前提创建组件实例对象初始化Props操作创建proxy对象去获取Propsprops作为参数传入setup将proxy挂载到render上总结前言 props指父组件...
    99+
    2023-05-19
    Vue3 props原理 Vue3 props使用 Vue3 props
  • 深入理解java中Arrays.sort()的用法
    在Java中,Arrays.sort()方法是用来对数组进行排序的。它使用了经过优化的快速排序算法,可以对任何类型的数组进行排序。A...
    99+
    2023-08-14
    Java
  • 深入理解typescript中的infer关键字的使用
    目录infer案例:加深理解参考infer 这个关键字,整理记录一下,避免后面忘记了。有点难以理解呢。 infer infer 是在 typescript 2.8中新增的关键字。 ...
    99+
    2022-11-12
  • 深入理解Android Matrix理论与使用的详解
    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。首先大家看看下面这个3 x 3的矩阵...
    99+
    2022-06-06
    matrix Android
  • 深入理解C#委托delegate的使用
    目录1.什么是委托2:委托的实现 命名法委托静态方法的实例化委托 实例化方法的委托多播委托 匿名委托什么时候适用委托1.什么是委托 委托就是委托某个方法...
    99+
    2022-11-13
    C#委托delegate C#委托
  • Vue深入理解插槽slot的使用
    目录一、插槽(slot)是什么二、使用场景三、slot的分类默认插槽具名插槽作用域插槽四、介绍对slot的理解一、插槽(slot)是什么 slot是组件内的一个占位符,该占位符可以在...
    99+
    2022-11-13
    Vue slot Vue slot用法 Vue slot原理
  • Android入门教程之Fragment的具体使用详解
    目录Fragment 的简单用法动态加载 FragmentFragment 实现返回栈Fragment 和 Activity 之间的交互Fragment 生命周期Fragment 的...
    99+
    2022-11-12
  • Android入门教程之RecyclerView的具体使用详解
    目录RecyclerView 的基本用法横向滚动RecyclerView 点击事件RecyclerView 的基本用法 和我们之前学习的控件不一样,RecyclerView 属于新增...
    99+
    2022-11-12
  • Android入门教程之ListView的具体使用详解
    目录ListView 的简单用法定制 ListView 的界面提升 ListView 的运行效率ListView 的点击事件ListView 的简单用法 在布局中加入 ListVie...
    99+
    2022-11-12
  • C语言深入讲解指针与结构体的使用
    目录1 啥是指针1.1指针与指针变量1.2总结2 指针和指针类型2.1指针+-整数3 野指针3.1 野指针的成因1指针未初始化2指针越界访问3指针指向的空间释放3.2 如何避免野指针...
    99+
    2022-11-13
  • 深入学习Go语言中NumPy对象的使用方法
    Go语言作为一种高效、简洁、易于学习的编程语言,在近年来越来越受到程序员们的欢迎。在数据科学领域,NumPy是一个非常常用的Python库,它提供了一个高效的多维数组对象,以及用于处理这些数组的函数。虽然Go语言没有内置的NumPy库,但...
    99+
    2023-08-28
    numpy 对象 教程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作