【Python Numpy教程】切片和索引

简介: 【Python Numpy教程】切片和索引

前言


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


5ffa75005bb14ab3bc9c8841b05aecc9.png

2.3 示例代码2

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

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


954a59c8aa184581a9ecb1b94e0d8e2b.png

2.4 示例代码3

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

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


04b0d64c3ce042cd99d85b24e1aedf5b.png


三、数组切片


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]]


a6dbe51f6e3e47bca7585f01d2a8eb84.png

这些示例演示了如何使用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]]


da71159f3c6c4007b9579aeeec39c669.png

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)


520bd63ec58249b49ab39e3f0ff5c167.png

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


总结


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

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


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

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

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
328 1
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
194 1
|
2月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
427 0
|
2月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
173 0
|
2月前
|
索引 Python
Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
本文通过生动的“嫁接”比喻,讲解Python列表切片赋值操作。切片可修改原列表内容,实现头部、尾部或中间元素替换,支持不等长赋值,灵活实现列表结构更新。
127 1
|
2月前
|
索引 Python
098-python列表_切片_slice_开始_结束
本文介绍了Python中列表的切片(slice)操作,通过“前闭后开”原则截取列表片段,支持正负索引、省略端点等用法,并结合生活实例(如切面包、直播切片)帮助理解。切片不改变原列表,返回新列表。
247 4
|
4月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
402 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
4月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
388 0
|
5月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
148 4
|
4月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。