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

如何高效从大NumPy数组中每M个元素提取N个元素?

高效提取NumPy数组中循环交错的子数组

核心思路

利用NumPy的重塑(reshape)和切片索引实现全向量化操作,彻底规避循环,适配超大数组的高效处理。


场景1:示例中的双交错子数组

针对你给出的示例数组(每8个元素分为两组各4个),直接通过重塑+切片提取:

import numpy as np

arr = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16])
# 重塑为N行8列的二维数组,自动适配总长度
reshaped = arr.reshape(-1, 8)
# 提取每行前4个元素并展平
a = reshaped[:, :4].flatten()
# 提取每行后4个元素并展平
b = reshaped[:, 4:].flatten()

输出结果:

a -> [1 2 3 4 9 10 11 12]
b -> [5 6 7 8 13 14 15 16]

场景2:补充说明的三交错子数组

针对你提到的4个sample0 → 4个sample1 → 4个sample2循环结构,数组总长度为12的倍数(你的499875840刚好满足:499875840 ÷ 12 = 41656320),同样用重塑+切片处理:

# 示例超大数组(替换为你的实际数组)
arr_large = np.arange(499875840)
# 重塑为N行12列的二维数组
reshaped_3 = arr_large.reshape(-1, 12)
# 分别提取三个子数组
sample0 = reshaped_3[:, :4].flatten()
sample1 = reshaped_3[:, 4:8].flatten()
sample2 = reshaped_3[:, 8:].flatten()

效率说明

上述操作均为NumPy的向量化操作,底层由C实现优化,不会产生Python级别的循环开销。reshape在多数情况下是视图操作(不复制数据),切片提取也仅生成原数组的视图或轻量复制,内存占用极低,处理近5亿元素的数组完全无压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:43:17