【数据分析之道-NumPy(三)】numpy切片与索引

news/2024/10/17 1:46:30/

在这里插入图片描述

文章目录

  • 专栏导读
  • 1、前言
  • 2、NumPy数组切片
    • 2.1一维数组切片
    • 2.2多维数组切片
  • 3、NumPy数组索引
    • 3.1一维数组索引
    • 3.2多维数组索引
  • 4、NumPy数组高级索引
    • 4.1整数数组索引
    • 4.2布尔数组索引
    • 4.3数组索引
  • 总结

专栏导读

✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。

本文录入于《数据分析之道》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《数据分析之道》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
还可以订阅进阶篇《数据分析之术》,其包含数据分析方法论、数据挖掘算法原理、业务分析实战。
✍ 其他专栏:《数据分析案例》 ,《机器学习案例》

1、前言

在NumPy中,切片和索引是常用的操作,可以用于获取数组中的部分数据或单个数据。下面我们将分别介绍NumPy中的切片和索引。
在这里插入图片描述

2、NumPy数组切片

2.1一维数组切片

切片是指获取数组的部分数据。在NumPy中,可以使用切片符号:来指定切片范围。

下面是一个简单的例子:

import numpy as npa = np.array([1, 2, 3, 4, 5])
print(a[1:3])

这个例子中,我们创建了一个包含5个元素的一维数组,并使用a[1:3]来获取索引为1和2的元素。切片结果为[2, 3]。

2.2多维数组切片

除了一维数组,切片也可以用于多维数组。

例如:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a[0:2, 1:3])

在这个例子中,我们创建了一个3x3的二维数组,并使用a[0:2, 1:3]来获取第1行至第2行(不包含第3行)和第2列至第3列(不包含第4列)的元素。切片结果为[[2, 3], [5, 6]]。

3、NumPy数组索引

索引是指获取数组中单个元素的值。在NumPy中,可以使用方括号[]和索引号来获取数组中的元素。

3.1一维数组索引

对于一维数组,可以使用一个整数来索引;对于多维数组,需要使用一个元组来索引。

下面是一个简单的例子:

import numpy as npa = np.array([1, 2, 3, 4, 5])
print(a[3])

这个例子中,我们创建了一个包含5个元素的一维数组,并使用a[3]来获取索引为3的元素。索引结果为4。

3.2多维数组索引

对于多维数组,可以使用一个元组来索引。

例如:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a[1, 2])

在这个例子中,我们创建了一个3x3的二维数组,并使用a[1, 2]来获取第2行、第3列(从0开始计数)的元素。索引结果为6。

4、NumPy数组高级索引

4.1整数数组索引

整数数组索引是指使用整数数组来获取数组的部分数据。在NumPy中,可以使用一个整数数组来获取一维数组的部分数据,或者使用两个整数数组来获取二维数组的部分数据。

下面是一个简单的例子:

import numpy as npa = np.array([1, 2, 3, 4, 5])
print(a[[0, 2, 4]])

这个例子中,我们创建了一个包含5个元素的一维数组,并使用[0, 2, 4]来获取索引为0、2、4的元素。结果为[1, 3, 5]。

对于二维数组,可以使用两个整数数组来获取部分数据。

例如:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a[[0, 2], [1, 2]])

在这个例子中,我们创建了一个3x3的二维数组,并使用[0, 2]和[1, 2]来获取第1行第2列和第3行第3列的元素。结果为[2, 9]。

4.2布尔数组索引

布尔数组索引是指使用布尔数组来获取数组的部分数据。在NumPy中,可以使用一个布尔数组来获取一维数组的部分数据,或者使用两个布尔数组来获取二维数组的部分数据。

下面是一个简单的例子:

import numpy as npa = np.array([1, 2, 3, 4, 5])
b = np.array([True, False, True, False, True])
print(a[b])

这个例子中,我们创建了一个包含5个元素的一维数组,并使用[True, False, True, False, True]来获取数组中所有为True的元素。结果为[1, 3, 5]。

对于二维数组,可以使用两个布尔数组来获取部分数据。

例如:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([True, False, True])
c = np.array([False, True, True])
print(a[b, c])

在这个例子中,我们创建了一个3x3的二维数组,并使用[True, False, True]和[False, True, True]来获取第1行第3列和第2行第3列的元素。结果为[3, 6, 9]。

4.3数组索引

数组索引是指使用一个数组来获取数组的部分数据。在NumPy中,可以使用一个数组来获取一维数组的部分数据,或者使用两个数组来获取二维数组的部分数据。

下面是一个简单的例子:

import numpy as npa = np.array([1, 2, 3, 4, 5])
b = np.array([0, 2, 4])
print(a[b])

这个例子中,我们创建了一个包含5个元素的一维数组,并使用[0, 2, 4]数组来获取索引为0、2、4的元素。结果为[1, 3, 5]。

对于二维数组,可以使用两个数组来获取部分数据。

例如:

import numpy as npa = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([0, 2])
c = np.array([1, 2])
print(a[b, c])

在这个例子中,我们创建了一个3x3的二维数组,并使用[0, 2]和[1, 2]数组来获取第1行第2列和第3行第3列的元素。结果为[2, 9]。

总结

总的来说,切片和索引是NumPy中常用的操作,可以用于获取数组中的部分数据或单个数据。切片和索引都可以用于一维数组和多维数组,但在多维数组中需要使用元组来指定索引。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗


http://www.ppmy.cn/news/47243.html

相关文章

【一】MATLAB基础知识

【一】MATLAB基础知识 1 数值数据类型的分类 整型 无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、 无符号64位整数。 带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、 带符号64位整数。 无符号8位整数数据范围&#xff…

耗时半月,终于把牛客网上的软件测试面试八股文整理成了PDF合集(测试基础+linux+MySQL+接口测试+自动化测试+测试框架+jmeter测试+测试开发)

大家好,最近有不少小伙伴在后台留言,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些程序员了。 这不&#xf…

软件生存周期

软件生存周期 同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡的许 多阶段,一般称为软件生存周期。把整个软件生存周期划分为若干阶段,每个阶段的任务相对 独立,而且比较简单,便于不同人员…

嵌入式Linux(7):字符设备驱动--申请设备号

文章目录 1、字符设备和杂项设备的区别2、注册字符类设备号的两个办法第一种:静态分配一个设备号第二种:动态分配注销设备号 写代码不带参数测试(动态分配):带参数测试(静态设置): 建…

C/C++编译器内存优化技术:内存优化关注程序对内存的访问和使用,以提高内存访问速度和减少内存占用。

目录标题 引言缓存优化数据局部性 数据对齐:优化数据结构的布局,以提高内存访问速度。内存池:为对象分配使用预先分配的内存池,以减少动态内存分配和释放的开销。垃圾收集优化:针对使用垃圾收集的语言,优化…

jsp有哪些内置对象?作用分别是什么?

JSP(Java Server Pages)中有以下九个内置对象&#xff1a; 1.request: 表示客户端的HTTP请求。可以使用它来获取客户端提交的表单数据、URL参数、HTTP头等信息。 <!DOCTYPE html> <html> <head><title>获取request对象信息</title> </head&…

运行时内存数据区之方法区(二)

方法区的演进细节 首先明确&#xff1a;只有HotSpot才有永久代。BEA JRockit、IBMJ9等来说&#xff0c;是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节&#xff0c;不受《]Va虚拟机规范》管束&#xff0c;并不要求统一。Hotspot中方法区的变化&#xff1a; …

学系统集成项目管理工程师(中项)系列08b_合同管理(下)

1. 项目变更约定 1.1. 合同生效后&#xff0c;当事人不得因姓名、名称的变更或者法定代表人、负责人、承办人的变动而不履行合同义务 2. 违约责任的承担方式 2.1. 继续履行 2.2. 采取补救措施 2.3. 赔偿损失 2.4. 支付约定违约金或定金 3. 注意事项 3.1. 当事人的法律资…