5、NumPy 高级索引和切片

发布时间:2024年01月18日

目录

一、切片(Slicing)

二、NumPy 高级索引详解

1. 布尔型索引

2. 列表/数组索引

3. 花式索引 (Fancy Indexing)

4. 元组索引

三、结合切片与高级索引


一、切片(Slicing)

????????切片操作允许访问数组的子集。在 NumPy 中,可以对多维数组进行切片,就像处理一维数组一样简单。

import numpy as np

# 创建一个一维数组
arr = np.arange(10)
# 切片,获取索引1到6之间的元素
slice_arr = arr[1:7]
print(slice_arr)  # 输出: [1 2 3 4 5 6]

# 创建一个二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 切片,获取第一行的第二和第三个元素
slice_arr_2d = arr_2d[0, 1:]
print(slice_arr_2d)  # 输出: [2 3]

二、NumPy 高级索引详解

1. 布尔型索引

布尔型索引允许我们根据条件选取数组中的元素。例如,假设有一个一维数组 arr

import numpy as np 
arr = np.array([4, 2, 9, 6, 7, 3])

创建一个布尔向量并用其作为索引来获取满足条件的元素:

mask = arr > 5 
selected = arr[mask]

selected 将包含大于5的所有元素。

2. 列表/数组索引

在多维数组中,可以使用整数列表或数组来进行索引。这允许你直接指定需要提取的元素位置。

multi_arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
indices = [0, 2] # 指定行索引 
selected_rows = multi_arr[indices]

selected_rows 将包含第0行和第2行的内容。

3. 花式索引 (Fancy Indexing)

花式索引允许使用非连续或者非顺序的索引集合。它可以用于一维或多维数组。

fancy_indices = [1, 3, 2, 0] 
shuffled_arr = multi_arr[fancy_indices]

shuffled_arr 将按照给定的顺序重新排列数组的行。

4. 元组索引

在多维数组中,可以使用元组形式的索引来选择特定的子区域。

slice_of_multi_arr = multi_arr[1:3, 1:3] # 等效于 multi_arr[(1, 2), (1, 2)]

这里选择了第1至第2行和第1至第2列的子矩阵。

三、结合切片与高级索引

在实践中,可以组合使用切片与高级索引以实现更复杂的操作。例如:

mixed_indexing = multi_arr[[0, 2], 1:3:2] # 结合了列表索引和切片

这里首先选择了第0行和第2行,然后在每一行上取第1列和第3列(由于步长为2,所以只取到了第3列)

文章来源:https://blog.csdn.net/sinat_34461199/article/details/135672038
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。