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

NumPy数组切片语法

NumPy切片基于视图而非副本的核心机制,掌握这个原则能避免大量坑。让我从基础到高级逐层拆解:

一、基础语法与维度

NumPy切片遵循[start:终止:step]的通用模式,不同维度用逗号分隔:

import numpy as np # 一维数组切片 arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) print(arr[2:7]) # [2 3 4 5 7] start包含,终止不包含 print(arr[::2]) # [0 2 4 6 8] step=2,默认从头到尾 print(arr[::-1]) # [9 8 7 6 5 4 3 2 1 0] step=-1实现反转

关键点start终止step都可以省略:

  • start默认为0
  • 终止默认为维度长度
  • step默认为1

二、多维切片的优雅设计

NumPy的多维切片通过逗号分隔实现对每个维度的独立控制:

# 二维数组 arr2d = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]) # 选取第1-2行,第2-3列(从0开始计数) print(arr2d[1:3, 2:4]) # [[ 6 7] # [10 11]] # 使用步长跳跃选择 print(arr2d[::2, ::2]) # [[ 0 2] # [ 8 10]] # 混合使用:选择所有行,第1和第3列 print(arr2d[:, [1, 3]]) # [[ 1 3] # [ 5 7] # [ 9 11] # [13 15]]

三、高级切片技巧

1. 负索引与步长组合

arr = np.arange(20).reshape(4, 5) # 负索引从末尾开始计数 print(arr[-2:, -3:]) # 选取最后2行的最后3列 # 负步长实现反向选择 print(arr[::-1, ::-1]) # 完全反转数组

2. Newaxis扩展维度

arr = np.array([1, 2, 3]) # 将一维转为二维 print(arr[:, np.newaxis]) # [[1], [2], [3]] print(arr[np.newaxis, :]) # [[1, 2, 3]]

3. 省略号...的智能匹配

arr3d = np.random.rand(3, 4, 5) # 省略号自动展开剩余维度 print(arr3d[1, ...]) # 等价于 arr3d[1, :, :] print(arr3d[..., 2]) # 等价于 arr3d[:, :, 2]

四、视图机制与内存效率

这是NumPy切片的精髓:

original = np.arange(10) slice_arr = original[2:7] # 修改切片会影响原数组 slice_arr[0] = 99 print(original) # [ 0 1 99 3 4 5 6 7 8 9] # 获取真正副本 copy_arr = original[2:7].copy() copy_arr[0] = 88 print(original) # [ 0 1 99 3 4 5 6 7 8 9] 不受影响

视图机制的优势

  • 内存效率:不复制数据,只维护视图指针
  • 速度快:操作视图直接作用于原数组内存
  • 大数据友好:处理大型数组时避免内存溢出

五、高级应用场景

1. 切片作为函数参数

def process_batch(data, batch_size=32): """按批处理数据""" for i in range(0, len(data), batch_size): batch = data[i:i+batch_size] # 处理批次数据...

2. 切片配合条件索引

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 选择每行大于3的元素 mask = data > 3 print(data[mask]) # [4 5 6 7 8 9]

3. 维度重塑与切片

arr = np.arange(24) reshaped = arr.reshape(2, 3, 4) # 选择特定维度组合 print(reshaped[0, :, :2]) # 第一块的所有行,前两列 print(reshaped[:, 1, 3]) # 所有块的中间行,最后一列

六、常见陷阱与解决方案

  1. 维度丢失问题
arr = np.array([[1, 2, 3]]) print(arr[0]) # [1 2 3] 降维了 print(arr[0:1]) # [[1 2 3]] 保持维度
  1. 广播规则冲突
a = np.ones((3, 4)) b = np.zeros(4) result = a + b # 自动广播 # 但切片操作需要显式对齐维度 result = a + b[np.newaxis, :]

NumPy切片的核心在于多维坐标系的精确定位内存视图机制的高效运用。掌握这些概念后,你就拥有了对数组数据的 surgical knife(手术刀级控制力)。

http://www.jsqmd.com/news/527351/

相关文章:

  • scrapy框架下载与创建
  • Unity多线程避坑指南:为什么你的子线程总崩溃?
  • 船舶/无人艇/无人船,线性nomoto响应型操纵运动,回转实验和Z型实验MATLAB仿真程序(...
  • 深圳寄修安全|2026高端奢华腕表寄修全指南(含6城正规门店及全品牌维修明细) - 时光修表匠
  • Photoshop安装教程 2026最新版详细图文安装教程
  • 2026无锡GEO运营|推广|优化公司获客能力深度评测报告 - 资讯焦点
  • WSL2 中部署 Pixel Mind Decoder:Windows 开发者的 Linux 模型测试方案
  • CyberChef:解锁数据处理能力的安全分析瑞士军刀
  • 【含文档+源码】基于SSM框架的宠物领养系统设计与实现
  • 【OpenClaw 全面解析:从零到精通】第 004 篇:OpenClaw 在 Linux/Ubuntu 上的安装与部署实战
  • STM32嵌入式开发笔记的智能整理:BERT文本分割模型应用尝试
  • 树莓派安装与配置
  • 探索C++标准库中的算法:<algorithm> 头文件概览
  • 别再只用RSA了!手把手教你用Java SM2国密算法给接口数据加个密
  • 2026年路面灌缝胶厂家推荐:泰安市元博工程材料有限公司,沥青灌缝胶/聚氨酯灌缝胶/道路灌缝胶厂家精选 - 品牌推荐官
  • 本地商家做小红书3个月0咨询?90%都死在路径全错 - Redbook_CD
  • Z-Image-Turbo-辉夜巫女提示词工程入门:从C语言逻辑到自然语言描述的转换技巧
  • RAKwireless SDI-12库深度解析:嵌入式环境传感器通信实现
  • MC33926电机驱动芯片原理与STM32嵌入式实践
  • eVTOL应急消杀模块功率链路优化:基于高压隔离、高效驱动与精准负载管理的MOSFET选型方案
  • 7.MySQL-InnoDB
  • 大润发购物卡高价回收,立即变现! - 团团收购物卡回收
  • Day1学习笔记 --AIAgent 项目 --文件上传与解析(一)
  • CLIP-GmP-ViT-L-14图文匹配测试工具:在Ubuntu服务器上的生产环境部署详解
  • Qwen3-0.6B-FP8作品集:FP8模型在正则表达式生成任务准确率
  • Adafruit Unified Sensor传感器抽象层原理与工程实践
  • 零门槛上手:五款永久免费内网穿透工具实战指南
  • 别等审计通报才行动:MCP OAuth 2026强制合规窗口仅剩89天,这份含12个可执行checklist的速通手册已内部封存
  • 2026年3月现浇搭建公司口碑榜,精选评价好的公司,现浇搭建供应商解决方案与实力解析 - 品牌推荐师
  • 2026年浙江地区靠谱的钢筋混凝土检查井推荐,费用怎么收 - 工业推荐榜