NumPy 高级索引

PythonPythonBeginner
立即练习

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

介绍

在本实验中,你将学习 NumPy 的高级索引(advance indexing),这是一种用于从 ndarray 的不同行和列中选择随机元素的技术,适用于当你想要选择的元素没有特定顺序的情况。

虚拟机使用提示

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

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

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

导入所需库并创建 NumPy 数组

首先,我们需要导入 numpy 库并创建一个 NumPy 数组,以便在其上执行高级索引(advance indexing)。

import numpy as np

x = np.array([[11, 28], [23, 84], [95, 56]])
print("The original array")
print(x)

在上述代码中,我们导入了 numpy 库并创建了一个 NumPy 数组,该数组将用于高级索引。

整数索引(Integer Indexing)

通过整数索引,我们可以基于 N 维索引选择任意元素。每个整数数组用于表示该维度中的索引数量。

y = x[[0, 1, 2], [0, 0, 1]]
print("The output after integer indexing")
print(y)

在上述代码中,我们对 NumPy 数组 x 执行整数索引,并创建一个新数组 y,其中将包含选中的元素。我们从 NumPy 数组 x 的每一行中选择指定列的一个元素。行索引包含所有行号,列索引指定要选择的元素。

布尔索引(Boolean Indexing)

布尔索引用于当我们希望基于某些条件(使用比较运算符或其他运算符)从 ndarray 中选择元素时。

print("The items greater than 11 are:")
print(x[x > 11])

在上述代码中,我们对 NumPy 数组 x 执行布尔索引。我们从 NumPy 数组 x 中返回大于 11 的元素。

结合高级索引与基本索引

我们可以通过将切片(:)或省略号(...)与索引数组结合使用,来组合高级索引和基本索引。

z = x[1:4, 1:3]
print("After using basic slicing")
print(z)

y = x[1:4, [1, 2]]
print("After slicing using advance index for column")
print(y)

在上述代码中,我们对 NumPy 数组 x 进行切片操作。我们使用了基本切片和针对列的高级索引。

移除非数值(NaN)值

我们可以使用补码运算符(~)来移除非数值(NaN)值。

a = np.array([np.nan, 1, 12, np.nan, 3, 41, 54])
print("After omitting NaN the output array is :")
print (a[~np.isnan(a)])

在上述代码中,我们使用补码运算符(~)从 NumPy 数组 a 中移除非数值(NaN)值。

移除非复数

我们可以使用 iscomplex 函数从数组中过滤掉非复数。

a = np.array([1, 2+6j, 5, 3.5+5j])
print("After filtering the non-complex numbers :")
print (a[np.iscomplex(a)])

在上述代码中,我们使用 iscomplex 函数从 NumPy 数组 a 中过滤掉非复数。

总结

在本实验中,你学习了 NumPy 库中 ndarray 元素的不同类型的高级索引。你通过一些示例了解了 NumPy 中高级索引的不同使用场景。通过这种技术,你可以从 NumPy 数组的不同行和列中随机选择元素。