详解Python_Numpy库函数take_along_axis()【由索引矩阵生成新的矩阵】
函数take_along_axis()用于由索引矩阵生成新的矩阵。
提问:由已有矩阵的索引生成新的矩阵为什么要用函数take_along_axis(),我用Numpy库ndarray对象的切片操作不行么?
答案是:Numpy库ndarray对象的切片操作不是万能的,比如下面的两种情况它就不能解决,而下面两种情况可以用函数take_along_axis()解决。
情况一:我由argsort()函数得到了矩阵元素按从小到大排序的索引,接下来我想由个这个排序索引得到一个新的矩阵,这个新矩阵的元素就是按从小到大排列的。这种情况下光靠切片操作就很难实现这个功能了。不信的话诸君可以试一试,反正昊虹君是试了的,很麻烦。但是此时用函数take_along_axis()就很方便,示例如下:
import numpy as npA = np.array([[10, 30, 20], [60, 40, 50]])
B = np.sort(A, axis=1)
index1 = np.argsort(A, axis=1)
C = np.take_along_axis(A, index1, axis=1)
运行结果如下:
从这个示例可以看出,函数take_along_axis()很方便的帮我们通过索引值矩阵index1按序取出了A中的元素形成了数组C。
情况二:
现有三维矩阵A如下:
A = np.arange(2*3*4).reshape([2, 3, 4])
现在要实现下面这个目标:
选取A的第0页的第1行和A的第1页的第2行构成一个新的三维矩阵B,B矩阵的形状为(2, 1, 4)。
这个目标用切片操作是无法实现的,昊虹君也尝试过直接用切片实现这个目标,但无奈没有成功。
不过这个目标用函数take_along_axis()就很容易实现了,实现的代码如下:
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询# OpenCV的版本为4.4.0import numpy as np
A = np.arange(2*3*4).reshape([2, 3, 4])index1 = np.zeros([2, 1, 1]).astype('int')index1[0, 0, :] = 1
index1[1, 0, :] = 2B = np.take_along_axis(A, index1, axis=1)
运行结果如下:
从上面的结果来看,代码的确实现了“选取A的第0页的第1行和A的第1页的第2行构成一个新的三维矩阵B,B矩阵的形状为(2, 1, 4)。”
具体是怎么实现的,
昊虹君参考博文https://blog.csdn.net/baidu_37157624/article/details/123124561,
并仔细思考后得到了其实现原理的精炼理解。
具体其实现原理的精炼理解,
昊虹君把它写在了博文 https://www.hhai.cc/thread-120-1-1.html 中,请大家跳转浏览,谢谢。
补充说明:
①使用函数take_along_axis()时要注意,索引矩阵index1的维度数应该和原矩阵A的维度数相同。
②二维以下时实现上面的功能是完全可以用ndarray的切片或方法take()实现的。
关于ndarray的切片操作的详细介绍见博文 https://www.hhai.cc/thread-117-1-1.html
关于方法take()的详细介绍见博文 https://www.hhai.cc/thread-121-1-1.html
详解Python_Numpy库函数take_along_axis()【由索引矩阵生成新的矩阵】相关推荐
- Gcc详解以及静态库、动态库生成
[转] Gcc详解以及静态库.动态库生成 http://www.360doc.com/content/10/0619/14/1795182_33985297.shtml 1.gcc包含的c/c++编译 ...
- 斯坦福NLP名课带学详解 | CS224n 第15讲 - NLP文本生成任务(NLP通关指南·完结)
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...
- Menu详解(二):利用XML生成菜单和子菜单
前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题. 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1.<Menu详解(一): ...
- 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成
详解Python基础random模块随机数的生成 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python基础random模块随机数的生成.txt ] ( ...
- Elastricsearch 索引操作详解(快速入门、索引管理、映射详解、索引别名)
一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...
- 【OpenCV 4开发详解】图像噪声的种类与生成
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- java 8 新功能详解_Java 8和Java 14之间的新功能
java 8 新功能详解 从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近2个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用 ...
- python random库生成伯努利随机数的方法_详解Python基础random模块随机数的生成
随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的random模块提供了生成随机数的方法,使用这些方法时需要导入ran ...
- 波士顿矩阵和新波士顿矩阵
背景 在制定公司层战略的时候,BCG矩阵(波士顿矩阵)是一种非常流行的方法,下面咱们就来聊聊波士顿矩阵和他的弟弟新波士顿矩阵叭 首先呢这两哥们,都是由波士顿咨询集团(Boston Consulting ...
最新文章
- Vue-Router API参考
- mybatis数据库数据分页问题
- 【pyradiomics学习】——影像组学特征
- qt qss设置字体大小_Qt编写自定义控件70-扁平化flatui
- php处理结果集,php中mysqli 处理查询结果集的几个方法
- Java ——异常处理
- win10 忘记登录密码后 修改密码
- linux下qt实现vlc视频播放器,Qt编写视频播放器(vlc内核)
- matlab脉冲调制,基于matlab脉宽调制方法的研究
- 让你的网站用上炫酷的中文字体
- 新版电脑版微信终于可以用上小程序了
- 【顺序表】SqList *L是什么意思
- uni-app 快速集成 IM 即时通信的方法——TUIKit 来啦
- matlab 打包封装,matlab中如何封装打包成exe文件
- 收银系统的优势功能有哪些?
- 《C++新经典Linux C++通信架构实战》第1章 课程介绍
- 报错:ERROR: for nginx Cannot start service proxy;for proxy Cannot start service proxy;......
- 新征程,筑生态 - 华为中国ICT生态之行2017走进武汉
- 软碟通 UltraISO V9.6.0.3000 官方多语言安装版(附注册码)
- ECCV 2020 论文大盘点-图像视频修复篇
热门文章
- 【解决】addEventListener监听滚动与removeEventListener移除监听阻止冒泡(e.preventDefault())不生效
- Acwing第 68 场周赛【未完结】
- 【CSS-Part3 ------样式显示模式、背景设置、三大特性 】
- 英语基本语法(三)-代词
- springboot集成swagger3与knife4j
- c语言在线考试系统的需求分析,基于C/S架构的通用计算机在线考试系统
- 有主机出现报警“刷新硬件 IPMI 系统事件日志”出现常规性系统错误“Retrleve IPMI DEL request to host failed,事件中有很多相关报警
- 数据分析案例学习---关于“线上教育提升毛利额问题
- 2.Java 网络编程TCP通讯例子 双向发送
- 平面图转对偶图的应用