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

如何高效重塑一维数组:每行保留指定数量样本

一维数组高效重塑为指定二维数组的方案

需求说明

将一维数组重塑为二维数组,第一行包含样本0至7,第二行包含样本8至15,以此类推。

输入示例

array([   0,    1,    2, ..., 1277, 1278, 1279])

输出示例

array([[   0,    1,    2, ..., 1221, 1222, 1223],
       [   8,    9,   10, ..., 1229, 1230, 1231],
       [  16,   17,   18, ..., 1237, 1238, 1239],
       ...,
       [  40,   41,   42, ..., 1261, 1262, 1263],
       [  48,   49,   50, ..., 1269, 1270, 1271],
       [  56,   57,   58, ..., 1277, 1278, 1279]])

现有实现代码

import numpy as np
data = np.arange(0, 128*10)

# Reshape for S/H
temp = data.reshape(8*8, -1, order='F')
out = np.zeros((8, int(len(data)/8)))
for idx in range(0, 8):
    out[idx] = temp[idx*8: idx*8+8, :].ravel(order = 'F')

高效替代方案

可以完全利用NumPy的向量化操作替代显式循环,避免Python循环的性能开销,代码更简洁且效率更高:

import numpy as np
data = np.arange(0, 128*10)

# 高效重塑操作
out = data.reshape(8, 8, -1).transpose(0, 2, 1).reshape(8, -1)

步骤解释

  1. 第一步reshape:将原一维数组拆分为三维数组(8,8,N),其中N = 总长度/(8*8),这一步把数据按8个一组、共8组的方式初步拆分。
  2. transpose转置:将三维数组的轴调整为(8,N,8),让原本分散的同组元素变成连续的列。
  3. 第二步reshape:将三维数组压平为二维数组(8, -1),直接得到目标格式的结果。

这种方法依赖NumPy的底层C语言优化,比显式Python循环快得多,尤其在处理大规模数据时优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:13:30