В настоящее время у меня есть данные временных рядов, которые я разбил на партии для использования с моделями глубокого обучения. Весь имеющийся у меня CSV-файл имеет размер (33000, 149)
, и я пытаюсь сделать из этих данных пакеты, состоящие из еще меньших мини-пакетов размером (100, 40)
, в виде скользящего окна.
Общие данные, которые у меня будут - это вложенный словарь, который выглядит примерно так:
data[fold][day][batch][minibatch]
fold
относится к тому, какой CSV-файл у нас (есть 9 файлов), day
относится к тому, в какой день мы находимся (общее количество партий будет разделено поровну в зависимости от количества дней), batch
- это партии, которые составляют один день. , minibatch
- это, по сути, список, содержащий 32 из этих «окон», каждое из которых имеет размер (100, 40)
.
Например, если первый CSV-файл содержит 33 000 строк,тогда я бы:
- Перебрать строки и установить счетчик, который будет считаться до 32.
- Как только счетчик достигнет 32, я добавляю список
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 массивы?