У меня есть дата с таким столбцом, который выглядит следующим образом:
0 [ [ 1051, 0, 10181, 62, 17, ...
1 [ [ 882, 0, 9909, 59, 23, 9...
2 [ [ 1061, 0, 10192, 60, 17, ...
3 [ [ 122, 4, 501, 2, 8, 3, ...
4 [ [ 397, 1, 859, 9, 8, 5, ...
5 [ [ 1213, 1, 10791, 23, 17, ...
6 [ [ 1395, 3, 11147, 0, 17, ...
7 [ [ 757, 3, 1900, 34, 23, 8...
8 [ [ 129, 0, 507, 10, 8, 3, ...
9 [ [ 1438, 0, 11177, 26, 2, ...
10 [ [ 1272, 1, 10901, 7, 17, ...
Пример строки с меньшим количеством функций будет выглядеть примерно так:
[[1,2,3,4],[2,3,4,5],[3,4,5,6]]
Тип данных - этострока, поэтому json.loads
необходимо использовать для преобразования их в массивы, которые [N_TIMESTAMPS, N_FEATURES], где каждая функция является числовым значением.
Чтобы использовать эти данные в качестве входных данных для нейронной сети, я долженпреобразовать этот столбец в простой массив формы: [N_SAMPLES, N_TIMESTAMPS, N_FEATURES].Итак, вот так:
[[[1,2,3,4],[2,3,4,5],[3,4,5,6]],[[1,2,3,4],[2,3,4,5],[3,4,5,6]]]
Вот как я это делаю сейчас:
train_x = np.array(
df.time_stream.apply(json.loads).apply(np.array).apply(
lambda x: x.reshape(N_TIMESTAMPS,N_FEATURES).tolist()).values.tolist()
)
Для набора данных, который имеет 268 521 строк, это вычисление занимает 12,5 минут.Не идеально, но это работало;однако, это не масштабируется.Для нового набора данных с 756 961 строками он никогда не завершится (N_TIMESTAMPS = 100; N_FEATURES = 54), поскольку он использует всю оперативную память и компьютер падает.
Я ищу рекомендации, как сделать это быстрее и, возможно, более эффективно использовать память.Одна из проблем заключается в том, что используется много подкачки.