如何迭代拼接2D NumPy数组生成(100,75,4)形状的3D数组?
解决方法
问题根源
你之前的np.stack代码报错,是因为第一次循环得到的temp_array是**(75,4)的2维数组,第二次循环stack后变成(2,75,4)**的3维数组;第三次循环时,新取的切片是(75,4)的2维数组,和3维的temp_array维度不匹配,自然会报错。而np.append默认会扁平化数组,所以最终得到(7500,4)的2维结果。
两种可行方案
方案1:预先初始化数组(高效直接)
既然知道最终数组形状是(100,75,4),可以直接创建空数组,循环填充对应位置:
import numpy as np # 定义要提取的列 target_cols = ['Open', 'High', 'Low', 'Close'] # 预初始化指定形状的空数组 result_array = np.empty((100, 75, 4)) for i in range(100): # 提取第i到i+74行(共75行)的目标列数据,转成numpy数组 slice_data = timeseries[target_cols].iloc[i:i+75].to_numpy() # 将切片数据赋值到结果数组的第i个位置 result_array[i] = slice_data print(result_array.shape) # 输出 (100, 75, 4)
方案2:用列表收集后一次性合并(更灵活)
先把每次的切片数据存入列表,最后用np.array或np.stack合并成3维数组,这种方式在循环中效率更高:
target_cols = ['Open', 'High', 'Low', 'Close'] data_slices = [] for i in range(100): slice_data = timeseries[target_cols].iloc[i:i+75].to_numpy() data_slices.append(slice_data) # 列表转numpy数组,自动生成(100,75,4)的3维结构 result_array = np.array(data_slices) # 或者用np.stack(data_slices, axis=0),效果完全一致 print(result_array.shape) # 输出 (100, 75, 4)
内容的提问来源于stack exchange,提问作者user1517108
相关产品推荐
相关产品推荐

