934 字
5 分钟
页面浏览--访问次数--
数据分析|索引与切片

6.1 索引与切片概述#

索引与切片是从数组中提取目标数据的核心手段。NumPy 的索引机制比 Python 原生列表更加强大,不仅支持常规的位置索引和切片,还支持布尔条件筛选等高级用法。

下表列出了常用的索引/切片类型及其用法:

类型描述
基本索引通过整数索引直接访问元素,索引从 0 开始
行/列切片使用冒号 : 切片语法选择行或列的子集
连续切片从起始索引到结束索引按步长切片
使用 slice 函数通过 slice(start, stop, step) 定义切片规则
布尔索引通过布尔条件筛选满足条件的元素,支持逻辑运算符 &、|

6.2 一维数组的索引与切片#

一维数组的索引与切片规则和 Python 列表完全一致。

import numpy as np
# 创建一维数组
arr = np.array([17, 63, 17, 8, 99, 7, 27, 14, 76, 59, 26, 4, 75, 76, 62, 78, 84, 58, 95, 33])
print(arr)

输出:

[17 63 17 8 99 7 27 14 76 59 26 4 75 76 62 78 84 58 95 33]

基本索引与各类切片:

print(arr[0]) # 索引第一个元素
print(arr[:]) # 获取全部数据
print(arr[2:5]) # start:end+1,左闭右开区间
print(arr[slice(2, 15, 3)]) # start, end+1, step
print(arr[(arr > 10) & (arr < 70)]) # 布尔索引

输出:

17
[17 63 17 8 99 7 27 14 76 59 26 4 75 76 62 78 84 58 95 33]
[17 8 99]
[17 7 76 4 62]
[17 63 17 27 14 59 26 62 58 33]

要点说明:

  • arr[0]:通过整数下标直接访问单个元素。
  • arr[:]:不传参数表示获取全部元素。
  • arr[2:5]:取索引 2 到 4 的元素(左闭右开)。
  • arr[slice(2, 15, 3)]:等价于 arr[2:15:3],从索引 2 开始每隔 3 个取一个,到索引 14 为止。
  • arr[(arr > 10) & (arr < 70)]:布尔索引,筛选出同时满足大于 10 且小于 70 的所有元素。注意使用 & 而非 and。

6.3 二维数组的索引与切片#

二维数组的索引需要同时指定行索引和列索引,用逗号分隔。

# 创建二维数组(4行8列)
arr = np.random.randint(1, 100, (4, 8))
print(arr)

输出:

[[11 7 76 19 4 78 18 44]
[17 19 80 91 60 72 76 30]
[46 7 64 79 25 19 94 34]
[79 43 95 4 19 71 53 23]]

各种索引与切片操作:

print(arr[1, 3]) # 索引第2行第4列的元素
print(arr[1, :]) # 获取第2行的所有数据
print(arr[1, 2:5]) # 获取第2行的第3到第5个元素
print(arr[arr > 50]) # 获取所有大于50的元素
print(arr[2][arr[2] > 50]) # 获取第3行中大于50的元素
print(arr[:, 3]) # 获取第4列的所有元素

输出:

91
[17 19 80 91 60 72 76 30]
[80 91 60]
[76 78 80 91 60 72 76 64 79 94 79 95 71 53]
[64 79 94]
[19 91 79 4]

要点说明:

  • arr[1, 3]:先行后列,取第 2 行第 4 列的单个元素。
  • arr[1, :]:取第 2 行的全部列。冒号 : 表示”全部”。
  • arr[1, 2:5]:取第 2 行中索引 2 到 4 的元素。
  • arr[arr > 50]:对整个数组进行布尔筛选,返回一维数组(所有满足条件的元素展平排列)。
  • arr[2][arr[2] > 50]:先取第 3 行,再在该行内筛选大于 50 的元素。
  • arr[:, 3]:冒号表示取所有行,3 表示第 4 列。

6.4 本节小结#

本节完成了以下内容:

  • 掌握了一维数组的基本索引、切片、slice 函数和布尔索引。
  • 掌握了二维数组的行列索引、行列切片和条件筛选。
  • 理解了布尔索引中使用 &(与)、|(或)进行组合条件筛选。

下一节我们将学习 ndarray 的运算,包括算术运算、广播机制和矩阵乘法。


数据分析

连载中

第 6 篇,共 21 篇本文属于系列

数据分析|索引与切片
https://luq-blog.xyz/posts/2026-07-01-data-notes-06-indexing-slicing/
作者
Luquiescene
发布于
2026-07-01
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 95 天

部分内容可能已过时