B07_NumPy 高级索引(整数数组索引,布尔索引,花式索引)

2023-11-19

NumPy高级索引

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

整数数组索引

以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。
实例:

# -*- coding: UTF-8 -*-

import numpy as np

x = np.array([[1,2],[3,4],[5,6]])
# 第一个数组用于表示行的索引,第二个数组用于表示列的索引
y = x[[0,1,2],[0,1,0]]
print(y)

输出结果为:

[1 4 5]

以下实例获取了 4 * 3数组中的四个角的元素。行索引是[0,0]和[3,3],而列索引是[0,2]和[0,2]。
实例

import numpy as np

x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
print('\n')
rows = np.array([[0, 0], [3, 3]])
cols = np.array([[0, 2], [0, 2]])
y = x[rows, cols]
print('这个数组的四个角元素是:')
print(y)

输出结果为:

我们的数组是:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
这个数组的四个角元素是:
[[ 0  2]
 [ 9 11]]

返回的结果是包含每个角元素的 ndarray 对象。
可以借助切片 :或 … 与索引数组组合。如下面例子:
实例:

import numpy as np

a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = a[1:3,1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)

输出结果为:

[[5 6]
 [8 9]]
[[5 6]
 [8 9]]
[[2 3]
 [5 6]
 [8 9]]
布尔索引

我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取指定条件的元素的数组。
以下实例获取大于5的元素:

import numpy as np

x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])
print('我们的数组是:')
print(x)
print('\n')
# 现在我们会打印出大于5的元素
print('大于5的元素是:')
print(x[x > 5])

输出结果为:

我们的数组是:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
大于5的元素是:
[ 6  7  8  9 10 11]

以下实例使用了 ~ (取补运算符)来过滤NaN.

实例

import numpy as np

a = np.array([np.nan,  1,2,np.nan,3,4,5])
print(a[~np.isnan(a)])

输出结果为:

[1. 2. 3. 4. 5.]

以下实例演示如何从数组中过滤掉非复数元素。

实例:

import numpy as np

a = np.array([1,  2+6j,  5,  3.5+5j])
# 取出复数的内容
print(a[np.iscomplex(a)])

输出如下:

[2. +6.j 3.5+5.j]

花式索引
花式索引指的是利用整数数组进行索引。

花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。

花式索引跟切片不一样,它总是将数据复制到新数组中。
1、传入顺序索引数组
实例

import numpy as np

x = np.arange(32).reshape(8,4)
print(x)
print("---分别取出第4+1,2+1,1+1,7+1行的数据---")
print(x[[4,2,1,7]])

输出结果为:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]
---分别取出第4+1,2+1,1+1,7+1行的数据---
[[16 17 18 19]
 [ 8  9 10 11]
 [ 4  5  6  7]
 [28 29 30 31]]

2、传入倒叙索引数组

import numpy as np

x = np.arange(32).reshape(8,4)
print(x)
print("---分别取出第-4,-2,-1,-7行的数据---")
print(x[[-4,-2,-1,-7]])

输出结果为:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]
---分别取出第4+1,2+1,1+1,7+1行的数据---
[[16 17 18 19]
 [24 25 26 27]
 [28 29 30 31]
 [ 4  5  6  7]]

3、传入多个索引数组(要使用np.ix_)

import numpy as np

x = np.arange(32).reshape((8,4))
print(x)
"""
分别取出1,5,7,2行的第0列,第3列,第1列,第2列
"""
print(x[np.ix_([1,5,7,2],[0,3,1,2])])

输出结果为:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]]
[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

B07_NumPy 高级索引(整数数组索引,布尔索引,花式索引) 的相关文章

  • 【AcDbRegion::createFromCurves】

    public static class AcRxClass cdecl AcDbRegion desc void desc AcDbRegion SAPEAVAcRxClass XZ 函数 public static enum Acad E
  • 掌握Python的X篇_18_字典(通过“{}“定义一个字典)

    文章目录 1 字典是什么 2 字典的基本操作 2 1 定义字典 2 2 添加元素 2 3 通过Key引用value 2 4 删除元素 2 5 遍历字典中元素 1 字典是什么 list作为容器已经非常方便 但是引用list中的元素是依赖下标
  • 第十二章_Redis单线程 VS 多线程

    Redis为什么选择单线程 是什么 这种问法其实并不严谨 为啥这么说呢 Redis的版本很多3 x 4 x 6 x 版本不同架构也是不同的 不限定版本问是否单线程也不太严谨 1 版本3 x 最早版本 也就是大家口口相传的redis是单线程
  • 史上最全 ——LINQ to SQL语句

    适用场景 实现过滤 查询等功能 说明 与SQL命令中的Where作用相似 都是起到范围限定也就是过滤作用的 而判断条件就是它后面所接的子句 Where操作包括3种形式 分别为简单形式 关系条件形式 First 形式 下面分别用实例举例下 1
  • 单片机中常用的C语言编程

    单片机内部集成了CPU RAM ROM 定时器 中断系统 通讯接口等一系列电脑的常用硬件功能 其任务是信息采集 依靠传感器 处理 依靠CPU 和硬件设备 例如电机 LED等 的控制 在给单片机输入灵魂时常使用C语言进行编程 本文以keil
  • C++基础——引用讲解1

    目录 6 1 引用概念 1 定义 2 引用的格式 2 引用的特性 三 引用的用法 1 有了引用 就不需要取地址了 2 引用的另一大用法 引用这么强的功能 能不能代替指针 6 1 引用概念 1 定义 引用不是新定义一个变量 而是给已存在的变量
  • python日志(2)——logging

    python日志 2 logging进阶 文章目录 python日志 2 logging进阶 一 logging的四大组件 1 logger 2 Handler 3 Formatter 二 输出日志的常用方式 总结 一 logging的四大
  • x86寄存器

    通用寄存器 GPR寄存器 AX Accumulator 累加寄存器 也叫累加器 BX Base 基地址寄存器 CX Count 计数器寄存器 DX Data 数据寄存器 指针寄存器 SP Stack Pointer 堆栈指针寄存器 BP B
  • 47 转置卷积 [动手学深度学习v2]

    转置卷积 卷积不会增大输入的高宽 通常要么不变 要么减半 转置卷积则可以用来增大输入高宽 Y i i
  • 测试自动化框架平台选型汇总篇

    本文介绍测试自动化常用的框架和平台 语言为python或javascript 无java UI自动化 python pytest playwright 文章 http t csdn cn 2dMF5 python selenium unit
  • 计算机英语·NO

    N n 换行符 name demanding 名字恢复 name mangling 名字毁坏 nanoseconds ns 纳秒 neg operations neg操作 negation two s complement 非 二进制补码的
  • 【电商】电商后台设计—订单中心

    订单系统连接了用户和商家 用户可以通过订单看到商品购买详情 商家则可以通过订单看到购买用户信息等 而整个订单系统囊括了许多模块 如订单生成 订单计算等 一 订单的生成与状态 1 下单过程 电商下单的过程相信大家都不陌生 我们以从购物车下单为
  • laravel路由

    路由 在laravel中 定义路由的地方在routes web php文件中 在使用laravel前必须先定义路由 然后才能在浏览器中访问 routes文件夹中还有一个api php 用于定义api路径 最简单的路由 Route get f
  • GPIO_Speed_50MHz的值是多少

    在STM32底层库中 使用GPIO Speed 50MHz等来表示输出口的最高频率 那么他的值是多少 查看了一下定义 是个枚举 后来查了一下枚举才知道 当枚举中的某个元素备赋值后 从该元素往后是递增的 即1 2 3 当赋给指定的偏移地址后
  • react中props详解

    1 props的基本使用 react组件之间的传值 是离不开props的 代码展示 export default class Parent extends Component render return div h3 我是Parent组件
  • python中if else语句用法_Python条件语句详解:if、else、switch都有了

    01 if条件语句 if语句用于检测某个条件是否成立 如果成立 则执行if语句内的程序 否则 跳过if语句 执行后面的内容 if语句的格式如下 if 表达式 语句1 else 语句2 if语句的执行过程如下 如果表达式的布尔值为真 则执行语
  • PyAutoGui图像操作(一):图像定位方式及返回

    一 PyAutoGui介绍 PyAutoGUI是Python功能强大的UI自动化库 其目的是可以用程序自动控制鼠标和键盘操作 主要用来实现PC端的UI自动化 有鼠标控制 键盘操作 屏幕截图 图片定位 消息对话框 窗口操作等功能 有倒计时 鼠
  • 使用IntelliJ IDEA开发Java Web HelloWorld

    下载Tomcat 首先 下载Apache Tomcat并解压到本地计算机 可存放于任何位置 tomcat官网 https tomcat apache org 下载稳定版版本即可 下载解压好 启动bin下的startup bat文件 访问 h
  • 图神经网络调研

    图神经网络调研 图神经网络简介 应用场景 典型模型 GCN PinSAGE GraphSAGE GAT 图神经网络与知识图谱 异质图和同质图 部分参考链接 最近在做一些图神经网络相关的课题 做了些调研 简单记录一下想法和收获 图神经网络简介

随机推荐

  • OSFormer阅读笔记

    目录 前言 1 模型的特点 2 模型结构 2 1 CNN backbone 2 2 位置感知Transformer LST 2 3 粗细特征融合 CFF 2 4 动态伪装实例归一化 DCIN 2 5 损失函数 3 可视化分析 参考 前言 O
  • JAVA面向过程(二十六) if-else if-else多选择结构

    语法结构 1 2 3 4 5 6 7 8 9 10 if 布尔表达式1 语句块1 else if 布尔表达式2 语句块2 else if 布尔表达式n 语句块n else 语句块n 1 当布尔表达式1为真时 执行语句块1 否则 判断布尔表达
  • 微信小程序反编译

    安装逍遥安卓模拟器 安装node js不作细述 按提示安装即可 安装完成后在命令窗口输入 node v 能查看到版本号即可 打开脚本地址下载反编译脚本 解压 安装依赖 在脚本目录下shift 鼠标右键 打开命令窗口 逐条命令安装 npm i
  • python requests请求终止,python中requests小技巧

    关于 Python requests 在使用中 总结了一些小技巧把 记录下 1 保持请求之间的Cookies 我们可以这样做 2 请求时 会加上headers 一般我们会写成这样 唯一不便的是之后的代码每次都需要这么写 代码显得臃肿 所以我
  • opencv+mfc应用程序依赖库

    msvcp110 dll msvcr110 dll vccorlib110 dll和它统计目录下的所有库 https blog csdn net seu nuaa zc article details 53525569 ucrtbased
  • PC端:hover 样式在移动端的兼容处理

    写了一个轮播 有hover效果 PC端正常显示 移动端就出现一些问题 点击之后滑动到下一张 上一张有hover效果 要点击其他地方才会消失 解决方案 参考文章CSS hover 样式在移动端的兼容处理 链滴 media hover hove
  • mysql唯一索引如何实现,从基础到源码统统帮你搞定

    面试失败之后 在这之后的很长一段时间后 他没敢再去面试 觉得自己太丢人 技术太差不敢去谈论技术话题 后来他渐渐开始看网上的文章 知道要刷leetcode 看面经 然后之后一年多的时间 边上课 边刷题 边看知识点 直到去年中旬 第二次开始面试
  • ImportError: cannot import name ‘soft_unicode‘ from ‘markupsafe‘

    打开jupyter notebook报下面的错误 这里说是markupsafe有错误 查看一下是否安装了这个包 pip show markupsafe 已经有了这个包 但是还报错 经过测试发现这个2 1 3版本不兼容 回退到2 1 0才行
  • 一文搞定Nginx的压缩、黑白名单、防盗链、零拷贝、跨域、双机热备等知识

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框
  • C++操作SQLite数据库

    准备工作 在使用C 操作SQLite之前 需要获得sqlite3 h sqlite3 lib sqlite3 dll 大家可以在 这里 下载 并将这3个文件导入VC 工程中 其中sqlite3 dll文件放到Debug文件夹里 SQLite
  • 01一刷AD20入门教程记录

    学习视频 Altium Designer 20 19 入门到精通全38集 四层板智能车PCB设计视频教程AD19 AD20 凡亿 哔哩哔哩 bilibili 工程 安装现有元件库和封装库 AD20 1 打开优选项设置 gt Data Man
  • 分享一个多类别超实用AI工具集合网站,你想要的AI网站这里全都有

    随着Al技术的快速发展 人工智能也变成当今热门的领域之一 它正在改变着我们的生活和工作方式 今天就和大家分享一个多类别超实用AI工具集合网站 你想要的AI网站这里全都有 全网AI工具一城选择 AI 城市是一个集合了各种人工智能相关的工具和资
  • 如何判断服务器在国内还是海外?

    已知晓网站或是已知晓IP 如何判断该服务器是国内的还是海外的呢 在已知网站域名的情况下 可以通过ping网站域名来获得服务器的IP 当然有些网站是做了禁ping的 不知道IP的情况下是无法判断是国内还是海外的机器 比如咱们已知晓IP是103
  • Java响应式编程

    Java响应式编程 一 lambda表达式 1 1 lambda简介 1 2 lambda语法 1 3 FunctionalInterface 1 4 方法引用 1 5 类型推断 1 6 变量引用 1 7 级联表达式和柯里化 二 Strea
  • RFID桌面一体机在珠宝管理中的应用

    1 产品 铨顺宏 FU M6 USB N是一款以Thingamgic优异的M6e NANO模组为核心集成桌面式RFID一体机 RFID桌面工作台外观轻薄时尚 便于安装同时不影响美观 适用于进行RFID标签的读取 写入等绑定操作 同时 设备具
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • oracle清除试图的数据,ORACLE大表中删除部分数据最佳方案

    如果业务无法停止的话 主要有这三种思路 思路1 根据ROWID分片 再利用Rowid排序 批量处理 回表删除 在业务无法停止的时候 选择这种方式 的确是最好的 一般可以控制在每一万行以内提交一次 不会对回滚段造成太大压力 我在做大DML时
  • Python+Selenium安装及环境配置

    转自 https www cnblogs com sandysun p 7838113 html 一 Python安装 Window系统下 python的安装很简单 访问python org download 下载最新版本 安装过程与其他w
  • 摄像头网络模组的使用

    摄像头和网络模组尾线如上图所示 利用上面两个模组 打算自己做一个简单的网络摄像头 在上面的模组网站上找到对应模组的接口定义资料 因为我们要自己将对应的网线接口等接好 本模组的接口如下 具体的该模组的接线如上所示 该网络模组尾线总共有 根 根
  • B07_NumPy 高级索引(整数数组索引,布尔索引,花式索引)

    NumPy高级索引 NumPy 比一般的 Python 序列提供更多的索引方式 除了之前看到的用整数和切片的索引外 数组可以由整数数组索引 布尔索引及花式索引 整数数组索引 以下实例获取数组中 0 0 1 1 和 2 0 位置处的元素 实例