【Numpy】NumPy数组的切片和索引操作深入详解

深入理解NumPy数组的切片和索引操作

引言

在数据分析和科学计算中,NumPy 是一个非常重要的库。它提供了强大的多维数组对象和丰富的函数库,帮助我们高效地进行数值计算和数据操作。今天,我们将深入探讨 NumPy 数组的切片和索引操作。

什么是索引?

索引是指通过下标来访问数组中的特定元素。下标是一个整数,表示元素在数组中的位置。下标从0开始,这意味着第一个元素的下标是0,第二个元素的下标是1,以此类推。

为什么使用下标?

使用下标的主要原因是它们提供了一种简单而高效的方式来访问数组中的特定元素。通过下标,我们可以直接定位到所需的元素,而无需遍历整个数组。

一维数组的索引

对于一维数组,索引操作非常简单。我们只需在方括号 [] 中指定一个下标即可访问对应的元素:

import numpy as np# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])# 访问数组中的第二个元素
element = arr[1]
print(element)  # 输出: 2

在这个示例中,arr[1] 表示访问数组 arr 中下标为 1 的元素,即第二个元素。

多维数组的索引

对于多维数组,我们可以使用多个下标来访问特定元素。每个下标对应数组的一个维度。比如,对于一个二维数组,我们需要两个下标,第一个下标表示行,第二个下标表示列:

# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 访问二维数组中的元素 5
element_2d = arr_2d[1, 1]
print(element_2d)  # 输出: 5

在这个示例中,arr_2d[1, 1] 表示访问数组 arr_2d 中第 1 行第 1 列的元素,即元素 5。

什么是切片?

切片操作允许我们从数组中提取一个子数组。切片的基本语法是 start:stop:step,其中:

  • start 是切片的起始索引(包含)。
  • stop 是切片的结束索引(不包含)。
  • step 是步长,表示每次跳过的元素数。
一维数组的切片

我们可以对一维数组进行切片操作,提取子数组:

# 提取子数组 [2, 3, 4]
sub_arr = arr[1:4]
print(sub_arr)  # 输出: [2 3 4]# 提取每隔一个元素的子数组 [1, 3, 5]
sub_arr_step = arr[0:5:2]
print(sub_arr_step)  # 输出: [1 3 5]

在上面的示例中,arr[1:4] 表示从索引 1 开始(包含索引 1),到索引 4 结束(不包含索引 4)的子数组。arr[0:5:2] 表示从索引 0 开始,到索引 5 结束,每隔一个元素提取一次。

多维数组切片

多维数组是指具有两个或更多维度的数组。例如,一个二维数组可以看作是一个矩阵,具有行和列。三维数组则可以看作是一个包含多个矩阵的数组。我们可以使用逗号分隔的方式对每个维度进行切片:

# 提取子数组 [[2, 3], [5, 6]]
sub_arr_2d = arr_2d[0:2, 1:3]
print(sub_arr_2d)  # 输出: [[2 3]#       [5 6]]

在这个示例中,arr_2d[0:2, 1:3] 表示从第一个维度(行)的索引 0 到 2(不包含 2),以及第二个维度(列)的索引 1 到 3(不包含 3)的子数组。

负索引

负索引是指从数组的末尾开始计数。例如,索引 -1 表示数组的最后一个元素,索引 -2 表示倒数第二个元素,以此类推:

# 访问数组的最后一个元素
last_element = arr[-1]
print(last_element)  # 输出: 5# 访问二维数组的最后一行的第一个元素
last_row_first_element = arr_2d[-1, 0]
print(last_row_first_element)  # 输出: 7
列表与NumPy数组的切片区别

在 Python 中,列表和 NumPy 数组的切片操作有一些不同之处。切片一个 NumPy 数组会创建原数组的一个视图,这意味着对切片的修改会影响原数组。而切片一个列表会创建一个新的列表,不会影响原列表:

# 创建一个列表
lst = [1, 2, 3, 4, 5]# 切片列表
sub_lst = lst[1:4]
sub_lst[0] = 99
print(lst)  # 输出: [1, 2, 3, 4, 5]
print(sub_lst)  # 输出: [99, 3, 4]# 切片NumPy数组
sub_arr = arr[1:4]
sub_arr[0] = 99
print(arr)  # 输出: [ 1 99  3  4  5]
print(sub_arr)  # 输出: [99  3  4]
综合示例:结合切片和索引

我们还可以结合使用切片和索引来进行更复杂的数据提取操作:

# 创建一个三维数组
arr_3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])# 提取子数组并进行索引操作
sub_arr_3d = arr_3d[:, 1, :]
print(sub_arr_3d)  # 输出: [[ 4  5  6]#       [10 11 12]]# 访问子数组中的特定元素
element_3d = sub_arr_3d[1, 2]
print(element_3d)  # 输出: 12

在这个示例中,arr_3d[:, 1, :] 表示从所有第一个维度中提取第二个维度的所有元素,然后我们可以进一步对提取的子数组进行索引操作。

结论

掌握 NumPy 数组的切片和索引操作是进行数据分析和科学计算的基础。通过这些操作,我们可以高效地访问和操作数据,从而更好地理解和分析数据。

希望这篇博客对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时告诉我。😊

参考:

NumPy基础入门:创建和管理多维数组
NumPy高级技巧:数组操作与随机数生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之性能剖析(四)

性能剖析 使用慢查询 Percona Server对慢查询日志做了哪些改进?比如"使用SHOW PROFILE"执行相同查询后可以抓取到的结果 # Time:110905 17:03:18 # UserHost:root[root] localhost[127.0.01] # Thread_id:7 Schema:saklia Last_errono:0 Killed:0 # Qu…

SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】

2.2 漏洞详情 SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】 【可验证】 详细描述TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。 TLS, SSH, IPSec协商及其他产品中使用的IDEA、DES及Triple DES密码或者3DES及Triple 3DES存在大约…

我想给儿子开发一个手机应用

我想给儿子开发一个手机应用,不知道从何入手,利用AI获取的大概方向: 在开发一款针对少儿的手机应用(App)时,内容方向的选择至关重要。以下是一些建议的方向,它们结合了当前的市场趋势、儿童教育…

自动化使用 ChatGPT 生成 PPT 大纲 - 基于 Python 和 PyAutoGUI

这篇文章将指导您利用 Python 的 pyautogui 库创建一个自动化的脚本,帮助您使用 ChatGPT 生成公司智能管理平台的 PPT 大纲。该脚本将打开 Chrome 浏览器,访问 ChatGPT 并输入相应的提示词,让 ChatGPT 为您创建 PPT 大纲。 C:\pythoncode\ne…

QGis3.34.5工具软件保存样式,软件无反应问题

在使用QGis软件保存SLD样式的时候,每次保存样式,软件都进入无反应状态,导致无法生成样式文件 百度中多次查询问题点,终未能在在3.34.5这个版本上解决问题。 考虑到可能是软件本身问题,于是删除了3.34.5这个版本&#x…

SAP ABAP MD04屏幕增加:增加列

需求:增加显示销售订单送达方 主要使用二代增强出口:M61X0002 事务码T-code:CMOD 填写描述,保存到对应的包下 分配增强到项目下 激活组件,激活后效果如下 编写ZXM61U04 SAP留出的按钮,填写描述 button1_ez = 送达方. 编写ZXM61U03 *&-------------------------…

Java版招投标管理系统源码:优化流程,提升效率,实现全方位项目管理

在现今日益竞争激烈的招标市场中,企业需要一款强大而灵活的招投标管理系统来优化流程、提升效率。我们的招投标管理系统正是为此而生,它集门户管理、立项管理、采购项目管理、公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等多…

解决git status提示error bad signature 0x00000000

问题描述: 操作git的时候电脑卡了,重启电脑后git status就提示bad signature 0x00000000,index file corrupt错误,如下: 解决办法: rm -f .git/index git reset

【赠书第25期】C#项目开发实战(微视频版)

文章目录 前言 1 项目构思与需求分析 1.1 项目构思 1.2 需求分析 2 系统设计 2.1 系统架构设计 2.2 数据库设计 2.3 接口设计 3 编码实现 3.1 环境搭建 3.2 编码规范 3.3 编码实现 4 测试与部署 4.1 单元测试 4.2 系统测试 4.3 部署与上线 5 总结与展望 6 推…

[面经] 西山居非正式面试(C++)

前言 这次面试是我第一次面试,而且我也并没有做好准备,应该说几乎就是临场发挥,面试的时间与我推测的相差太大,几乎就是做完简历的下一天就马上去面试了,有不少地方自己没能很好的答出,故做此记录。 关于…

代码随想录算法训练营第五十四天||392.判断子序列、115.不同的子序列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、392.判断子序列 思路 二、115.不同的子序列 思路 一、392.判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是…

力扣算法之1070. 产品销售分析 III

力扣传送门 题解 选出每个售出过的产品 第一年 销售的 产品 id、年份、数量 和 价格,很明显就是个排序问题 我的解 SELECT product_id,year as first_year,quantity,price FROM ( SELECT sale_id,RANK() OVER(PARTITION BY product_id ORDER BY [year] asc ) A…

第五周:坦诚是领导力的根基

1. 懂得很多道理,依然过不好这一生 “纸上得来终觉浅,绝知此事要躬行。” 我们往往就是这样,开导别人的时候,口若悬河,心灵鸡汤信手拈来,自以为洞穿了他人困境的本质,并且找到了解决办法&#x…

TinyChat: Visual Language Models Edge AI 2.0

TinyChat: Visual Language Models & Edge AI 2.0 要点 了解TinyChat和AWQ最新的技术发展。在边缘部署语言理解模型(LSTM)后,借助于视觉语言模型(VLM),可以为LLM提供更好地处理图像输入的能力,从而极大方便了文字对话问答、图片标题生成…

C#中结构struct能否继承于一个类class,类class能否继承于一个struct

C#中结构struct能否继承于一个类class,类class能否继承于一个struct 答案是:都不能。 第一种情行,尝试结构继承类 报错:接口列表中的类型"XX"不是接口interface。 一般来说,都是结构只能实现接口&#x…

【第四节】C++的派生与继承

目录 一、继承特性 二、派生类的定义格式 三、派生类的继承方式 3.1 三种继承方式概述 3.2 接口继承和实现继承 四、派生类的构造和析构函数 五、类的成员重定义 六、多重继承 6.1 多继承 6.2 多继承中的二义性问题 七、虚基类 八、总结 一、继承特性 在生物学中&a…

HDFS RPC响应调优:FairCallQueue调优

参考材料: Apache Hadoop 3.4.0 – Fair Call Queue Guide 一、案例 在 core-site.xml 配置文件中添加如下配置项&#xff1a; <property><name>ipc.8020.callqueue.impl</name><value>org.apache.hadoop.ipc.FairCallQueue</value> </pr…

vue学习汇总

目录 一、vue基本语法 1.插值表达式 {{}} 2.显示数据(v-text)和(v-html) 3.事件处理(v-on) 4.循环遍历(v-for) 5.判断语法(v-if) 6.元素显示与隐藏(v-show) 7.动态设置属性(v-bind) 8.数据双向绑定(v-model) 9.计算属性 二、vue组件 1.使用组件的三个步骤 2.注册组…

有趣的css - 列表块加载动效

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用 css 打造一个极简的列表块加载动效。 最新文章通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整…

使用Ollama和Open WebUI管理本地开源大模型的完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月27日12点20分 &#x1f004;️文章质量&#xff1a;96分 目录 ✨️Open-WebUI介绍 优点 &#x1f4a5;部署教程…