Конвертируйте большие массивы в панде в массив данных - PullRequest
0 голосов
/ 29 января 2019

У меня есть дата с таким столбцом, который выглядит следующим образом:

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), поскольку он использует всю оперативную память и компьютер падает.

Я ищу рекомендации, как сделать это быстрее и, возможно, более эффективно использовать память.Одна из проблем заключается в том, что используется много подкачки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...