【Python Numpy教程】切片和索引

news2024/11/16 3:48:50

文章目录

  • 前言
  • 一、切片和索引是什么?
  • 二、数组索引
    • 操作
    • 示例代码1
    • 2.3 示例代码2
    • 2.4 示例代码3
  • 三、数组切片
    • 3.1 最基础的数组切片
      • 1. 切片格式:
      • 2. 如何使用:
      • 3. 示例代码:
    • 3.2 切片中包括省略号
      • 基本格式
      • 1. 单个省略号示例:
      • 2. 多个省略号示例:
  • 总结


前言

NumPy是Python中用于科学计算的重要库之一,它提供了多维数组对象和许多用于操作这些数组的函数。在本教程中,我们将探讨NumPy中的数组切片和索引,这是使用NumPy进行数据处理和分析时的关键概念。数组切片和索引使您能够访问、操作和修改NumPy数组的元素,对于数据处理和提取特定数据非常有用。


一、切片和索引是什么?

当使用NumPy进行数据处理时,切片和索引是两个关键概念。
索引 就像是查找数组中的元素的地址。就像您查找书中的特定页数一样,索引帮助您找到数组中特定位置的值。索引从0开始,所以第一个元素的索引是0,第二个是1,以此类推。
切片 就像是从数组中切出一部分。可以想象成切面包,您可以选择切出的部分的起始和结束位置。这允许您提取数组中的一段数据,而不是整个数组。
索引帮助您找到一个具体的元素,而切片则让您可以选择一个范围,取出一组元素,或者按照一定规则筛选出数组中的数据。这两个工具对于从大型数据集中获取所需信息非常有用,让数据处理更加高效。

二、数组索引

操作

在NumPy中,您可以使用索引来访问数组中的元素。索引从0开始,使用[]进行索引操作,因此第一个元素的索引是0,第二个元素的索引是1,依此类推,如果学过C语言的同学,应该可以理解的非常的快,这其实和C语言数组取value是一样的。以下是一些示例:

示例代码1

import numpy as np

# 创建一个示例数组
arr = np.array([1, 2, 3, 4, 5])

# 访问第一个元素
print(arr[0])  # 输出: 1

# 访问第三个元素
print(arr[2])  # 输出: 3

在这里插入图片描述

2.3 示例代码2

您还可以使用负索引从数组末尾开始访问元素,例如 -1 表示最后一个元素,-2 表示倒数第二个元素,以此类推。

# 访问最后一个元素
print(arr[-1])  # 输出: 5

# 访问倒数第二个元素
print(arr[-2])  # 输出: 4

在这里插入图片描述

2.4 示例代码3

可以使用slice函数进行指定范围和step索引

s = slice(2,7,2)
arr = np.arange(10)
print(arr)
print(arr[s])

在这里插入图片描述

三、数组切片

3.1 最基础的数组切片

NumPy是一个强大的Python库,用于科学计算和数据分析,它提供了用于处理多维数组的功能。数组切片是一种在NumPy中常用的技术,用于获取数组的子集。让我们逐步介绍NumPy数组切片的格式、用法和示例代码。

1. 切片格式:

numpy的基础切片其实和我们的python的list,元组这些切片是一样的!但他还有其他的高级用法

NumPy数组切片的基本格式如下:
array[start:stop:step]

1.start:起始索引(包含在切片中),默认为0。
2.stop:终止索引(不包含在切片中)。
3.step:步长,用于控制切片的间隔,可以为负数。

那么多于多维数组,之间使用逗号隔开

[维度1切片,维度2切片...]

2. 如何使用:

通过这个基本格式,您可以创建一个切片对象,然后应用到NumPy数组上,以获取所需的子数组。

3. 示例代码:

下面是一些示例代码,演示如何使用NumPy数组切片:

import numpy as np

# 创建一个NumPy数组
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 获取索引1到4之间的元素(不包括索引4)
slice1 = arr[1:4]
print(slice1)  # 输出:[1 2 3]

# 获取索引2以及之后的元素
slice2 = arr[2:]
print(slice2)  # 输出:[2 3 4 5 6 7 8 9]

# 获取索引0到8之间,步长为2的元素
slice3 = arr[0:8:2]
print(slice3)  # 输出:[0 2 4 6]

# 使用负数索引,获取倒数第三个元素到末尾
slice4 = arr[-3:]
print(slice4)  # 输出:[7 8 9]

# 从末尾开始逆序获取数组
slice5 = arr[::-1]
print(slice5)  # 输出:[9 8 7 6 5 4 3 2 1 0]

# 使用二维数组的切片
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
slice6 = arr2d[:2, 1:]
print(slice6)
# 输出:
# [[2 3]
#  [5 6]]

在这里插入图片描述

这些示例演示了如何使用NumPy数组切片来获取不同范围的数组元素,以及如何应用于多维数组。切片是NumPy中强大且灵活的工具,可用于数据处理和分析中的各种任务。

3.2 切片中包括省略号

基本格式

NumPy数组切片的"…"(省略号)是一种特殊的切片操作,通常用于处理多维数组,其中维度较多,但只想在其中的一个或多个维度上执行切片操作。省略号可以用来代替一系列冒号(:)来表示多个维度的切片。
格式:
array[…, slice1, slice2, …]

省略号可以用于代替任意数量的冒号,以便对多维数组进行切片。以下是省略号的所有用法示例:

1. 单个省略号示例:

import numpy as np

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

# 使用单个省略号切片第一个维度
slice1 = arr[...]
print(slice1)
# 输出:
# [[[ 1  2  3]
#   [ 4  5  6]]
#
#  [[ 7  8  9]
#   [10 11 12]]


# 使用单个省略号切片第二个维度
slice2 = arr[:, ...]
print(slice2)
# 输出:
# [[[ 1  2  3]
#   [ 4  5  6]]
#
#  [[ 7  8  9]
#   [10 11 12]]

在这里插入图片描述

2. 多个省略号示例:

import numpy as np

arr = np.random.rand(2, 3, 4, 5)

# 使用多个省略号同时切片多个维度
slice3 = arr[..., 1, 2, ...]
print(slice3.shape)
# 输出:(2, 3)

# 使用多个省略号和其他切片
slice4 = arr[:, ..., 1:4, 2]
print(slice4.shape)
# 输出:(2, 3, 3)

在这里插入图片描述

这些示例演示了如何使用省略号来简化多维数组的切片操作。省略号可以用来代替多个冒号,从而更清晰和紧凑地表达切片操作,特别适用于高维数组的情况。


总结

在本教程中,我们介绍了如何使用NumPy进行数组切片和索引。这些功能使您能够有效地访问和操作NumPy数组中的元素。关键要点包括:

使用索引访问单个元素或使用负索引访问数组末尾的元素。
使用数组切片选择数组的特定部分,可以指定起始索引、结束索引和步长。
对于多维数组,可以使用逗号分隔的索引来访问不同维度。

这些技巧对于数据处理、分析和科学计算非常有用,帮助您轻松处理大量数据并提取感兴趣的信息。

希望本教程对您理解NumPy中的数组切片和索引有所帮助。继续学习和实践,以更好地掌握NumPy库的强大功能。

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

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

相关文章

Linux系统编程:IO系统总结

stdio标准IO 标准IO都是一些C语言的函数,注意与文件IO的系统调用函数区别开。 fopen 函数描述: 第一个参数填要打开的文件路径,第二个参数填以什么形式打开(读or写or其它)。 在我们学习fopen函数时,查看…

Vue基础之购物车案例

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 经过…

非关系型数据库Redis的安装【Linux】及常用命令

前言 Redis(Remote Dictionary Server)是一种开源的内存数据库管理系统,它以键值存储方式来存储数据,并且支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis最初由Salvatore Sanfilippo开发&#xff0c…

WiFi模块在智能家居中的应用与优化

智能家居技术的迅速发展已经改变了我们对家庭的定义。WiFi模块作为智能设备连接的核心,扮演着连接和控制智能家居生态系统的关键角色。本文将深入研究WiFi模块在智能家居中的应用,同时探讨如何通过优化来提升其性能和用户体验。 1. 智能家居中WiFi模块的…

QSqlTableModel结合使用数据库心得

文章目录 目的QSqlTableModel采用Model-View-Delegate(模型视图代理)框架的整体结构QT数据库组件用户界面层(UI Layer)SQL接口层(SQL API Layer)驱动程序层(Driver Layer)实现翻页功能实现数据库查询功能QSqlDatabaseQSqlQueryQSqlRecord目的 1: 了解QSqlTableMode 与 数据库…

基于wireguard与NAT实现windows10代理服务器

参考文章:https://blog.csdn.net/babytiger/article/details/127111474 一、 下载windows 安装包 下载wireguard安装包 二、 配置服务端: 新建空隧道并保存为server1,配置如下: 点击保存,并连接,多了个se…

STM32-创建项目流程

一、基于STM官网得库进行开发 准备工作:下载STM库文件 1、创建项目文件夹 2、在keil 中new uVision project,然后选择刚刚创建得文件夹,在文件夹里面创建一个文件,用来存放这个项目,然后在文件夹里面,写个文件名&am…

HHDBCS扩展数据库类型

为应对市面上的数据库种类繁多的问题,HHDBCS设置了扩展数据库功能。 在登陆界面点击“工具”,选择“扩展数据库类型”; 注:HHDBCS支持已kingbase,本文仅用来举例。 填入名称、所需数据库的信息,上传驱动…

Cesium 展示——实现右键菜单功能

文章目录 需求分析需求 在 Cesium 上实现右键菜单功能,使得对Cesium上的实体或其他可进行操作 分析 参考自文章:实现右键出现菜单选项功能 分析该需求,流程如下 写一个 div 作为右键弹出的菜单选项 ——> 监听鼠标右键事件——> 添加 Cesium 鼠标右击事件——>…

Jmeter分布式压测 —— 易踩坑点

1、压测机 无论是从成本角度还是维护的难易方面,压测机的数量,适量就好。举个例子,8C16G的一台服务器,部署Jmeter后,根据我个人的测试比对数据,配置≤1500个线程数,最好。太多了性能损耗较大&a…

文件夹批量重命名:如何利用上级目录给多个文件夹进行高效重命名

在文件管理中,我们经常需要处理大量的文件和文件夹。其中,文件名过长或混乱的问题经常让我们感到困扰。这不仅影响了我们的工作效率,还可能导致一些错误。为了解决这个问题,我们可以用云炫文件管理器将“上级目录”批量重命名文件…

[一] C++入门

摘要:OOP(面向对象),namespace,cout and cin,缺省参数,函数重载,引用,内联函数,auto,范围 for,nullptr 20世纪80年代,计算机界提出了OOP(object o…

我和“云栖大会”的双向奔赴

目录 引言初次参加云栖大会云栖大会带来的技术风向标本届大会最强技术有哪些?云栖大会对我职业生涯的影响个人对未来云栖大会的期待和建议结语 引言 想必大家对“云栖大会”并不陌生,“云栖大会”作为国内最具规模和影响力的云计算盛会,每年…

flink状态不能跨算子

背景 在flink中进行状态的维护和管理应该是我们经常做的事情,但是有些同学认为名称一样的状态在不同算子之间的状态是同一个,事实是这样吗? flink状态在保存点中的存放示意图 事实上,每个状态都归属于对应的算子,也…

用红黑树封装mapset【C++】

目录 前言 一,定义 二,完善set&map比较 三,迭代器实现 operator operator-- operator[] 四,发现问题 解决 修改一: set封装层面 修改二:正向迭代器修改 下期预告: 哈希&#x…

DataxWeb安装部署及使用--真香警告

DataxWeb安装部署及使用–真香警告 文章目录 1.Datax简介1.1 Datax是什么?1.2 Datax的架构1.3 设计理念1.4 DataX3.0框架设计1.5 DataX3.0插件体系1.6 DataX3.0核心架构1.6.1 核心模块介绍1.6.2 DataX调度流程 2.DataxWeb简介2.1 DataxWeb是什么?2.2 Dat…

在Ubuntu上安装Redis并学习使用get、set和keys命令

目录 安装Redis切换到root用户搜索redis相关软件包安装redis修改配置文件重启服务器使用redis客户端连接服务器 get与set命令keys 安装Redis 我们在Ubuntu20.04上进行Redis的安装 切换到root用户 使用su命令: 在终端中,输入su并按回车键。然后输入roo…

【产品应用】一体化伺服电机在焊接设备中的应用

随着制造业的不断发展,焊接设备在许多领域都得到了广泛应用,如汽车制造、机械加工、钢结构等领域。为了提高焊接设备的性能和效率,许多厂家开始采用一体化伺服电机作为焊接设备的主要驱动部件。本文将介绍一体化伺服电机在焊接设备中的应用背…

Leetcode—485.最大连续1的个数【简单】

2023每日刷题&#xff08;十五&#xff09; Leetcode—485.最大连续1的个数 实现代码 int findMaxConsecutiveOnes(int* nums, int numsSize){int max 0;int i;int flag 0;int cnt 0;for(i 0; i < numsSize; i) {if(nums[i] 1) {if(flag 0) {flag 1;cnt 1;} else {…

python 实时读取文件数据生成折线图——Matplotlib

有时&#xff0c;为了方便看数据的变化情况&#xff0c;需要画一个动态图来看整体的变化情况。主要就是用Matplotlib库。 效果演示&#xff1a; 代码如下&#xff1a; import matplotlib.pyplot as plt import pandas as pdfilename data.log# 创建空的 DataFrame 对象 df …