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

如何重塑NumPy数组:将(1000,80)转换为(100,40,2)格式

Reshape NumPy array from (N, 80) to (N, 40, 2) by grouping daily features

针对你的需求,我们可以用NumPy的数组堆叠或维度转换来高效实现,完全不用手动循环处理每一天。

先明确你的数据结构:

  • 原数组形状为(1000, 80),每一行里:前40列是特征1的40天数据,后40列是特征2的同期40天数据
  • 目标形状是(1000, 40, 2),第二维度对应40天,第三维度是当天的两个特征值(特征1+特征2)

最优实现方法

最直观的方式是把原数组拆成特征1和特征2的两个子数组,然后在最后一个维度上堆叠,直接得到目标结构:

import numpy as np

# 模拟你的原始数据(1000条观测,80列)
data = np.random.rand(1000, 80)

# 拆分特征1(前40列)和特征2(后40列)
feat1 = data[:, :40]
feat2 = data[:, 40:]

# 在最后一个维度堆叠,得到(1000, 40, 2)的数组
result = np.stack([feat1, feat2], axis=2)

用你的示例数据验证

拿你给出的小例子测试这个方法:

data = np.array([[11, 22, 33, 44], [55, 66, 77 ,88], [99, 100, 101, 102]])
feat1 = data[:, :2]  # 特征1的2天数据
feat2 = data[:, 2:]  # 特征2的2天数据
result = np.stack([feat1, feat2], axis=2)

print(result)

输出完全符合你的期望:

array([[[ 11,  33],
        [ 22,  44]],

       [[ 55,  77],
        [ 66,  88]],

       [[ 99, 101],
        [100, 102]]])

为什么你的第二种方法无效?

你尝试的np.c_[data[:, i::2] for i in range(2)].reshape((3, 2, 2))不能得到正确结果,是因为np.c_会把两个数组按列拼接成(3,4)的数组,再重塑时维度顺序不符合你要的“天-特征”结构。而np.stack能直接在指定维度合并,完美保留我们需要的层级关系。

另一种等价方法(reshape+transpose)

如果你习惯用维度转换,也可以这样写:

# 先把80列拆成2组(每组40天),再交换最后两个维度
result = data.reshape(1000, 2, 40).transpose(0, 2, 1)

这个逻辑是先将特征分组,再把“特征组”和“天数”的维度互换,同样能得到目标形状。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:59