当前位置: 首页 > news >正文

NumPy数组切片

文章目录

  • NumPy数组切片
    • 一、基础切片语法​​
    • ​二、一维数组切片​
    • 三、多维数组切片​​
    • 四、高级切片技巧​​
      • 1. ​​省略号(...)自动补全维度
      • 2. 布尔掩码切片
      • 3. 整数数组索引(Fancy Indexing)
    • 五、视图 vs 副本​​​
    • 六、注意事项​
    • 七、总结​

NumPy数组切片

NumPy​​切片(Slicing)​ ​操作允许高效地访问和操作数组的子集,其语法与 Python 列表类似但更强大,支持​ ​多维切片​ ​和​ ​视图机制​​(非副本)。以下是核心用法详解:

一、基础切片语法​​

切片语法为 start:stop:step,对每个维度独立生效。
​​规则​​:

  • start:起始索引(包含)
  • stop:结束索引(不包含)
  • step:步长(默认1)

​二、一维数组切片​

import numpy as nparr = np.array([0, 1, 2, 3, 4, 5])# 获取索引2到4(不包含4)的元素
print(arr[2:4])        # 输出: [2 3]# 前三个元素
print(arr[:3])         # 输出: [0 1 2]# 每隔一个元素取一次
print(arr[::2])        # 输出: [0 2 4]# 反转数组
print(arr[::-1])       # 输出: [5 4 3 2 1 0]

三、多维数组切片​​

每个维度用逗号分隔,支持独立切片规则。

​二维数组示例​

matrix = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 获取前两行的第2、3列
print(matrix[:2, 1:3])
# 输出:
# [[2 3]
#  [5 6]]# 所有行的第1列
print(matrix[:, 0])    # 输出: [1 4 7]# 每隔一行、逆序列
print(matrix[::2, ::-1])
# 输出:
# [[3 2 1]
#  [9 8 7]]

​三维数组示例

cube = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]]])# 第二个二维块的第一行、所有列
print(cube[1, 0, :])   # 输出: [5 6]

四、高级切片技巧​​

1. ​​省略号(…)自动补全维度

rnd = np.random.default_rng(1800)
arr_4d = rnd.integers(10, size=(2, 3, 4, 5))
arr_4d

高维NumPy数组

# 获取第一个3D块的前两行、所有列
arr_4d[0, :2, :, :]

第一个3D块的前两行、所有列

2. 布尔掩码切片

data = np.array([5, 12, 8, 3])
mask = data > 6
print(data[mask])   # 输出: [12 8]

3. 整数数组索引(Fancy Indexing)

print(matrix[[0, 2], [1, 0]])  # 输出: [2 7] → 取(0,1)和(2,0)位置元素

五、视图 vs 副本​​​

  • ​视图(View)​​:切片操作默认返回​​原数组数据的引用​​,修改切片会影响原数组
sub_matrix = matrix[:2, :2]
sub_matrix[0,0] = 100
print(matrix[0,0])  # 输出: 100 → 原数组被修改
  • 副本(Copy)​​:显式调用 .copy() 创建独立副本
sub_copy = matrix[:2, :2].copy()
sub_copy[0,0] = 200
print(matrix[0,0])  # 仍为100 → 原数组不变

六、注意事项​

    1. ​内存布局​​: 切片视图的内存与原数组连续,可能影响计算效率
    1. 负步长​​:step < 0 时,start 应大于 stop
    1. 维度保留​​: 使用 np.newaxis 可增加维度(如将向量转为矩阵)

七、总结​

场景​​ ​​推荐操作​​
提取局部数据基础切片 start:stop:step
批量修改子集切片 + 赋值操作
需要独立数据副本时显式调用 .copy()
跨步长采样设置 step 参数(如 ::2

相关文章:

  • 基于AI自动生成测试用例
  • 「OC」源码学习——关联属性再探索
  • leetcode 131. Palindrome Partitioning
  • 【Qt】QCustomPlot相关
  • 2025一带一路暨金砖国家技能发展与技术创新大赛第三届企业信息系统安全赛项
  • 【面板数据】上市公司外资持股数据集(2005-2023年)
  • 防火墙高可用(HA)主备验证实验(eNSP)
  • TTL和死信交换机实现延迟队列
  • 4款顶级磁力下载工具,速度提升器,可以变下变播
  • 第三章 第二大脑的运作机理 整理笔记
  • 套索回归与岭回归通俗讲解
  • TCP建立连接为什么不是两次握手,而是三次,为什么不能在第二次握手时就建立连接?
  • uniapp-商城-68-shop(1-商品列表,获取数据,utils、tofixed 、parseInt的使用)
  • Python容器
  • 基于 LangChain + Chroma 实现文档向量化入库(含摘要处理 + RAG 查询):完整实战流程
  • Linux基本指令篇 —— cd指令
  • 【TypeScript】结构化类型系统与标明类型系统
  • [Protobuf] 快速上手:安全高效的序列化指南
  • Anaconda 常用命令汇总
  • RocketMQ核心特性与最佳实践
  • 做私人小网站赚钱吗/网络营销课程论文
  • 做网站找云无限/seo基础优化包括哪些内容
  • 汉中网站建设有限公司/南京seo公司排名
  • 网站建设丨选择金手指排名15/甲马营seo网站优化的
  • 网站改版具体建议/百度账号登录入口
  • 沈阳专业制作网站/新闻热点