【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库的强大功能。

相关文章
|
3天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
30 8
|
3天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
21 7
|
3天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
22 4
|
3天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
20 5
|
26天前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
24 1
|
3月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
98 0
|
4月前
|
机器学习/深度学习 数据处理 计算机视觉
NumPy实践宝典:Python高手教你如何轻松玩转数据处理!
【8月更文挑战第22天】NumPy是Python科学计算的核心库,专长于大型数组与矩阵运算,并提供了丰富的数学函数。首先需安装NumPy (`pip install numpy`)。之后可通过创建数组、索引与切片、执行数学与逻辑运算、变换数组形状及类型、计算统计量和进行矩阵运算等操作来实践学习。NumPy的应用范围广泛,从基础的数据处理到图像处理都能胜任,是数据科学领域的必备工具。
63 0
|
1月前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
40 3
|
1月前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
59 2
|
3月前
|
机器学习/深度学习 算法 数据可视化
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征
特征工程是机器学习流程中的关键步骤,通过将原始数据转换为更具意义的特征,增强模型对数据关系的理解能力。本文重点介绍处理数值变量的高级特征工程技术,包括归一化、多项式特征、FunctionTransformer、KBinsDiscretizer、对数变换、PowerTransformer、QuantileTransformer和PCA,旨在提升模型性能。这些技术能够揭示数据中的潜在模式、优化变量表示,并应对数据分布和内在特性带来的挑战,从而提高模型的稳健性和泛化能力。每种技术都有其独特优势,适用于不同类型的数据和问题。通过实验和验证选择最适合的变换方法至关重要。
57 5
8种数值变量的特征工程技术:利用Sklearn、Numpy和Python将数值转化为预测模型的有效特征