RSS
菜单

切片、布尔索引、花式索引怎么用?如何高效筛选数组元素?

三种取数方式:

import numpy as np
a = np.arange(12).reshape(3, 4)
# 1. 切片(连续区间):行/列范围
a[0, 1:3]      # 第 0 行、第 1~2 列
a[:, ::2]      # 所有行、每隔一列
a[1:, :]       # 第 1 行起

# 2. 布尔索引(条件筛选,最常用)
a[a > 5]                  # 所有 >5 的元素(一维结果)
a[a[:, 0] > 2]            # 第一列 >2 的行
# 多条件用 & | ~ 且必须加括号
a[(a > 3) & (a < 10)]

# 3. 花式索引(按位置列表取)
a[[0, 2], [1, 3]]         # (0,1) 和 (2,3) 两个元素
a[np.array([0, 2])]       # 取第 0、2 行

关键区别:

  • 切片返回视图(共享内存):b = a[0]; b[0] = 99 会改动 a。
  • 布尔/花式索引返回副本:改动不影响原数组。
  • 二维数组 a[mask] 取的是行(mask 长度等于行数);要按列筛选用 a[:, mask]。

性能建议: 条件筛选用布尔索引(C 级速度);循环里反复切片很慢,能一次筛选就不要分步。

注意坑: 布尔条件必须用 &/| 而不是 and/or(后者对数组会报"truth value ambiguous")。

下载推广海报

圈内讨论推广海报

《切片、布尔索引、花式索引怎么用?如何高效筛选数组元素?》完整推广海报
一起交流

全部回复 0

分享经验,让问题更进一步

讨论,从你的观点开始

还没有回复,欢迎补充经验或分享不同的思路。