NumPy 索引与切片

NumPyNumPyBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将介绍 Python 的 Numpy 库中的索引(Indexing)和切片(Slicing)概念。我们将学习如何访问、修改和提取数组中的一系列元素。同时,我们将通过示例解释和演示 Numpy 库中不同的索引方法。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 Notebook 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟,直到 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,可以随时向 Labby 寻求帮助。实验结束后请提供反馈,我们将及时为你解决问题。

理解基础概念

  • 在 NumPy 数组中,切片(slicing)本质上是从数组中提取一系列元素的方式。
  • ndarray 对象中的元素始终遵循从零开始的索引(zero-based index)。
  • 在 Numpy 库中,可以通过索引(indexing)或切片(slicing)来访问和修改 ndarray 对象的内容,就像 Python 的内置容器对象一样。

Numpy 数组切片

  • 数组中的切片操作与 Python 列表中的切片操作方式相同。
  • 如果一个数组有 100 个元素,而你只想提取其中的一部分值,可以通过切片操作从完整的 ndarray 中提取所需的子集。
  • 学习 Python 列表切片后,你可以将相同的操作应用到 Numpy 的 ndarrays 上。

Numpy 数组索引

  • NumPy 库中提供了三种类型的索引方法:
    • 字段访问(Field access) - 这是通过值的索引直接访问字段。
    • 基本切片(Basic Slicing) - 基本切片是 Python 基本切片概念在 n 维数组中的扩展。
    • 高级索引(Advanced Indexing,本实验不涉及)

示例

  • 让我们通过一些示例来更好地理解这些概念。

示例 1 - 切片 Ndarray

import numpy as np

a = np.arange(10)
print("The ndarray is :")
print(a)

s = slice(2,7,2)
print("After applying slice() Function:")
print (a[s])
  • 上述代码使用 arange() 函数创建了一个 ndarray 对象。
  • 定义了一个切片对象,其起始值、结束值和步长分别为 2、7 和 2。
  • 然后,将此切片对象传递给 ndarray。将从索引 2 开始到索引 7 结束,步长为 2 的部分进行切片。

示例 2 - 切片单个元素

import numpy as np

a = np.arange(15)
print("The array is :")
print(a)

## 直接使用索引
b = a[7]
print("The Eighth item in the array is :")
print (b)
  • 上述代码从 ndarray 对象中切片出一个单独的元素。
  • 使用索引可以非常轻松地切片出数组中的单个元素。

示例 3

import numpy as np

a = np.arange(20)
print("The array is :")
print(a)

print("Slicing of items starting from the index:")
print(a[2:])
  • 上述代码从指定索引开始切片,直到最后一个索引或最后一个元素。

示例 4

import numpy as np

a = np.arange(20)
print("The array is :")
print(a)

print("Slicing of items between two given indexes:")
print(a[2:8])
  • 上述代码切片出两个给定索引之间的所有元素。
  • 它不包含结束索引处的值。

使用省略号(Ellipsis)

  • 在切片时,省略号(...)用于创建一个与数组维度长度相同的选择元组。
  • 对于多维 ndarray,如果省略号用于行位置,它将返回包含行中元素的 ndarray,列位置同理。
import numpy as np
a = np.array([[11,2,23],[33,44,5],[84,25,16]])

print ("The array is :")
print (a )
print ('\n')

## 返回第二列的元素
print ('The items in the second column are:')
print (a[..., 1] )
print ('\n')

## 切片第二行的所有元素
print ('The items in the second row are:')
print (a[1, ...])
print ('\n')

## 切片从第一列开始的所有元素
print ('The items onwards to column 1 are:' )
print (a[..., 1:])

总结

在本实验中,我们介绍了 Numpy 库中的索引(Indexing)和切片(Slicing)概念。我们学习了 Numpy 库中的不同索引方法以及多种数组切片方法。我们还通过示例演示了这些概念的实际应用。