You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效提取NumPy二维矩阵的多个二维切片?

高效批量裁剪矩阵的实现方案

核心思路

利用numpy的广播机制,一次性生成所有需要提取的元素的坐标,通过高级索引直接从原矩阵中取出所有裁剪结果,彻底规避Python循环带来的性能开销。

实现代码

import numpy as np

# 假设已定义X、from_row、to_row、from_col、to_col
rect_height = to_row[0] - from_row[0]
rect_width = to_col[0] - from_col[0]

# 生成行、列的固定偏移量
row_offsets = np.arange(rect_height)
col_offsets = np.arange(rect_width)

# 计算所有裁剪区域的行/列索引数组
# 广播后得到 (n_rects, rect_height) 和 (n_rects, rect_width) 的索引矩阵
row_indices = from_row[:, None] + row_offsets
col_indices = from_col[:, None] + col_offsets

# 扩展索引形状以支持广播索引,一次性提取所有裁剪结果
crops = X[row_indices[:, :, None], col_indices[:, None, :]]

效率说明

原循环方案在Python层面执行500万次迭代,每次迭代的解释器开销会极大拖慢整体速度。而向量化方案直接在numpy的C语言内核中完成所有坐标计算和数据提取,完全绕开了Python循环的性能瓶颈,处理大规模数据时效率提升非常显著。

内容的提问来源于stack exchange,提问作者FrontBack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:02:07