我目前有一些时间序列数据,已将其分为几批以供深度学习模型使用。我拥有的整个CSV文件的大小约为(33000, 149)
,并且我正在尝试以滑动窗口的方式从这些数据中制作由甚至更小的(100, 40)
大小的微型批处理组成的批次。>
我将拥有的整体数据是一个嵌套的字典,看起来像这样:
data[fold][day][batch][minibatch]
fold
指的是我们正在使用的CSV文件(共有9个文件),day
是指我们在哪一天(批总数将根据天数平均分配),batch
是构成一天的批次,minibatch
基本上是包含32个“窗口”的列表,每个窗口的大小为(100, 40)
。例如,如果第一个CSV文件有33,000行,那么我会:
minibatches
附加到列表batch
。我编写的代码如下:
batches = []
minibatches = np.empty(shape=(32, 100, 41))
count = 1
df = data[0] # First CSV file DataFrame.
start = time.time()
idx_end = df.shape[0] - 100
for idx in range(idx_end):
dataframe = df.iloc[idx:(idx + 100)] # Get 100 rows for each window.
minibatches[count - 1] = dataframe # Append the window to the corresponding index.
if count == 32: # Append the minibatches to batch once it reaches 32.
batches.append(minibatches)
minibatches = np.empty(shape=(32, 100, 41))
count = 0
count += 1
end = time.time() - start
print('Took about {0:.2f} seconds.'.format(end))
整个代码块花费了1805
秒(30分钟),这真是出乎意料。在使用np.empty
之前,我使用的是普通列表,其性能要好得多(通常少于30秒)。
我尝试这段代码的原因是,如果我要将数据馈入模型,则数据的大小应为(32, 100, 40)
,并且我想不出任何其他方法来转换包含DataFrames的列表到一个Numpy数组。
是否有更有效的方法将包含DataFrames的列表转换为Numpy数组?