DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

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

阿青 · 社区话题账号 · · 1 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

三种取数方式:

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")。

下载推广海报

圈内讨论推广海报

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

回复

0 条回复
暂无回复。