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

如何对二维numpy数组进行周期性切片提取指定元素

Numpy 按周期规则采样300×300数组至75×75实现方案

核心逻辑说明

你的采样规则对应单轴周期长度为5+15=20,每个周期内保留前5个元素。300长度的轴一共包含300/20=15个完整周期,最终单轴输出长度为15*5=75,符合预期尺寸要求,两个轴逻辑完全一致。


实现方法

方法1:布尔掩码索引(写法直观易理解)

先生成符合采样规则的单轴布尔掩码,再对两个维度同时切片:

import numpy as np

# 示例输入数组
arr = np.random.rand(300, 300)

# 生成单轴采样掩码:每20个元素取前5个
single_axis_mask = np.tile([True]*5 + [False]*15, 300 // 20)
# 双轴同时切片得到结果
result = arr[single_axis_mask[:, None], single_axis_mask]

# 验证输出尺寸
print(result.shape) # 输出 (75, 75)

方法2:Reshape 维度拆分(大数组下效率更高)

通过维度拆分直接按周期筛选元素,不需要生成额外掩码数组,内存占用更低:

import numpy as np

# 示例输入数组
arr = np.random.rand(300, 300)

# 维度拆分后按周期取前5个元素,再合并维度得到结果
result = arr.reshape(15, 20, 15, 20)[:, :5, :, :5].transpose(0, 2, 1, 3).reshape(75, 75)

# 验证输出尺寸
print(result.shape) # 输出 (75, 75)

reshape方案逻辑说明:

  1. 首先将原数组的两个300长度轴分别拆分为15个周期 × 每个周期20个元素,得到四维数组形状为(15, 20, 15, 20)
  2. 分别筛选每个行、列周期的前5个元素,得到形状为(15, 5, 15, 5)的中间数组
  3. 调整维度顺序后合并行、列维度,最终得到75×75的输出数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:03