Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引

2023-11-13

Numpy数组切片、bool索引、掩码和花哨索引

数组切片(slice)

数组切片的公式为 my_array[start: end: step, start: end: step]

#示例1:
import numpy as np
#设置随机种子
np.random.seed(0)
#初始化一个维度为3x4的数组
a = np.random.randint(0,10,(3,4))
#取出a数组前2行和前2列组成的数组
print(a)
print(a[0:2:1, 0:2:1])


#输出如下
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]
[[5 0]
 [7 9]]
#可以看到,对a取切片结果直观上就是取出数组中的一部分

在实际应用中,根据需要可以对r_start: r_stop: r_step句式进行简化,列的切片索引也是一样

依然以数组a作为演示:

简化操作 等价的完整操作
: : -1 end: 0: -1,表示反向遍历
: 0: end: 1,表示正向遍历
: a 0: a: 1,表示取该轴上的前a个元素
#行倒序排列并且取所有的列
print(a[::-1,:])
#与数组元素索引一起使用,取第一行并且取前2列
print(a[1,:2])

#输出如下:
[[2 4 7 6]
 [7 9 3 5]
 [5 0 3 3]]
[7 9]
bool索引(bool indexing)

Numpy的通用函数可以用来替换循环,以快速实现数组的逐元素(element-wise)运算,同样,我们也可以通过其他通用函数实现数组的逐元素比较,这些用于用于比较的通用函数可以用运算符等价。

运算符 对应的通用函数
== np.equal
!= np.not_equal
< np.less
<= np.less_equal
> np.greater
>= np.greater_equal
In [43]: x= np.arange(10)

In [44]: x<5 #小于
Out[44]: 
array([ True,  True,  True,  True,  True, False, False, False, False,
       False])

In [45]: x>5 #大于
Out[45]: 
array([False, False, False, False, False, False,  True,  True,  True,
        True])

In [46]: x <= 3 #小于等于
Out[46]: 
array([ True,  True,  True,  True, False, False, False, False, False,
       False])

In [48]: x >=4  #大于等于
Out[48]: 
array([False, False, False, False,  True,  True,  True,  True,  True,
        True])

In [49]: x != 9
Out[49]: 
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
       False])

In [50]: x ==4 
Out[50]: 
array([False, False, False, False,  True, False, False, False, False,
       False])
掩码(mask)

通过将bool索引作为参数传给数组(bool索引和数组同型),返回一个所有bool索引为True的子数组(一维)

np.random.seed(0)
x = np.random.randint(0,10,(3,4))
bool_index = x < 5
print(x)
print(x[bool_index])

#输出如下
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]
[0 3 3 3 2 4]
花哨索引(fancy indexing)

花哨索引和前面的简单索引非常相似,但是传递的是索引数组,而不是单个标量。花哨索引让我们能够快速获得并修改复杂的数组值的子数据集。

花哨索引在概念上非常简单,它意味着传递一个索引数组来一次性获得某个维度上的多个数组元素,例如以下数组:

#获得一维数组上的多个元素
c = np.arange(10)
fancy_index = [1,6,8]
print(c)
print(c[fancy_index])

#结果如下:
[0 1 2 3 4 5 6 7 8 9]
[1 6 8]
#获取二维数组上多个元素
np.random.seed(0)
d = np.random.randint(0,10,(3,4))
print(d)
print(d[[1,2,1],[2,2,0]])

#结果如下:
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]

[3 7 7]
#这里的花哨索引分别取到了d[1,2]、d[3,2]、d[1,0]
#可以将不同维度上的花哨索引组合起来使用
np.random.seed(0)
d = np.random.randint(0,10,(3,4))
print(d)
#对数组d分别取出行1,行0,行2并按此顺序组合,接着对组合出来的新数组,分别取出列2,列1,列3并按此顺序重新组合
print(d[[1,0,2]][:,[2,1,3]])

结果如下:
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]

[[3 9 5]
 [3 0 3]
 [7 4 6]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引 的相关文章

随机推荐

  • u-boot的norflash驱动分析,以及一些调试信息

    Flash 存储器接口还有两个标准 CFI和JEDEC CFI为公共Flash接口 Common Flash Interface 用来帮助程序从Flash芯片中获取操作方式信息 而不用在程序中硬编码Flash的ID JEDEC用来帮助程序读
  • 怎么用计算机打开开发者模式,win10如何打开开发者选项模式

    我们的win10系统中自带有开发者选项模式 该模式为Win10技术预览版开发此风格应用你需要开启 开发者模式 开启之后 在将应用提交给微软进行测试和认证前 你可以先在本地计算机上进行部署和测试 为开发者们提供了自由发挥的空间 那么win10
  • Oracle date日期类型使用

    Oracle中将日期转换为字符串 需要设置日期格式 to char sysdate fmt fmt YYYY MM DD HH24 MI SS 结果 2021 03 04 19 42 50 fmt YYYY MM DD HH12 MI SS
  • 多线程-UncaughtException

    在多线程开发中 我们会面对很多的异常问题 但是 主线程的异常我们知道很方便捕获并且处理 但是对于子线程而言呢 package Thread UncaughtException program 多线程和IO descripton 传统方法无法
  • Java打印程序设计全攻略 .

    前言 在我们的实际工作中 经常需要实现打印功能 但由于历史原因 Java提供的打印功能一直都比较弱 实际上最初的jdk根本不支持打印 直到jdk1 1才引入了很轻量的打印支持 所以 在以前用Java Applet JSP Servlet设计
  • div盒模型宽高计算

    一 计算div盒模型宽高 div盒模型宽度 width 左右padding 左右border 不包含左右margin div盒模型高度 height 上下padding 上下border 不包含上下margin
  • Linux新手入门教程

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net li3839 article details 80658514 下面给你讲解新手第一次
  • 怎么看有没有用到ajax,使用AJAX请求JSON数据。我没有看到结果

    我正在学习Angular JS 为什么我看不到任何结果 使用AJAX请求JSON数据 我没有看到结果 这是我的例子 HTML post desc JS var app angular module MyApp app controller
  • discuz伪静态设置方法

    首先 进入后台 全局 SEO设置 URL静态化 如图 接着打开 查看当前的Rewrite规则 下载合适规则
  • mac上使用svn

    第一步 使用Homebrew安装subversion Homebrew不知道怎么安装的话 请自行百度 brew install subversion 第二步 使用如下的命令进行检查是否安装了这个软件 brew list 得到如下结果 使用如
  • vue常用组件库

    Vue是主流的前端框架一 Vue js UI组件 element 饿了么出品的Vue2的web UI工具套件 Vux 基于Vue和WeUI的组件库 mint ui Vue 2的移动UI元素 iview 基于 Vuejs 的开源 UI 组件库
  • 32黑马QT笔记之QPixmap和QImage的相互转换

    32黑马QT笔记之QPixmap和QImage的相互转换 1 QPixmap与QImage的互相转换 1 头文件 void paintEvent QPaintEvent 2 实现 cpp文件 void Widget paintEvent Q
  • 敏捷开发系列终极之旅 第六站(像橄榄球运动一样富有激情的SCRUM)

    由来 为什么是Scrum Scrum原本的意思是橄榄球运动的一个专业术语 指 在橄榄球比赛中 双方前锋站在一起紧密相连 当球在他们之间投掷时他们奋力争球 在敏捷开发系列中 把一种开发流程命名为Scrum 其实就意味着 这种敏捷开发的流程 就
  • 解决Android手机root仍然出现adbd connot run as root in production build

    对于手机已经root 但是使用 adb root命令仍然出新adbd connot run as root in production build 原因是手机固件里面设置了adb shell 禁止root 解决方法 下载文件 http do
  • Linux文件、磁盘管理的一些命令:

    Linux文件 磁盘管理的一些命令 Num01 gt ls ls 列出目录的内容 linux文件或目录名称英文最长可有255个字符 中文最长127个字符 表示当前目录 以 开头的文件为隐藏文件 需要以 a参数才能显示 表示上级目录或父目录
  • Training a deep autoencoder or a classifier on MNIST digits_之调试运行与理解

    运行这个程序的主要目的 深入理解deep autoencoder 的基本原理和基本架构 搞明白是如何搭建起来的 弄清它是如何训练学习的 又是如何提取目标的特征的 最终又是怎样分类的 代码主程序如下 mnistdeepauto m plain
  • PHP计算时间差

    时间计算 距离现在多长时间 function format date time t time time f array 31536000 gt 年 2592000 gt 个月 604800 gt 星期 86400 gt 天 3600 gt
  • Web应用下实现定时任务简便方法

    在WEB应用下实现定时任务的简便方法 在web方式下 如果我们要实现定期执行某些任务的话 除了用quartz等第三方开源工具外 我们可以使用Timer和TimeTask来完成指定的定时任务 第一步 创建一个任务管理类 实现ServletCo
  • 基于QT的人脸识别考勤管理系统【一】

    前言 上篇我们已经用opencv实现了人脸识别https blog csdn net qq 42449351 article details 99052241 现在我们就用人脸识别来做一个考勤管理系统 该系统开发工具是 win10 Qt C
  • Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引

    Numpy数组切片 bool索引 掩码和花哨索引 数组切片 slice 数组切片的公式为 my array start end step start end step 示例1 import numpy as np 设置随机种子 np ran