Изменение формы массива Numpy с повторением некоторых элементов - PullRequest
0 голосов
/ 06 марта 2020

Я обучил NN в Керасе с LSTM, поэтому я использовал 3D-тензоры. Теперь я хочу прогнозировать с помощью набора данных, и мне нужно вставить 3D-тензор в мою NN.

(В моем случае я использовал features = 2 и lookback = 2, поэтому элементы ввода в LSTM: (batch_size, lookback, features))

Итак, представьте себе этот пример:

a = np.array([[1, 2],
              [3, 4]])

Мне нужно сделать a_2 = np.reshape(1, 2, 2), чтобы иметь возможность вставить его в LSTM.

Но если у меня есть больший набор тестовых данных, как, например,

b = np.array([[1, 2],
              [3, 4],
              [5, 6],
              [7, 8],
              [9, 10]])

Мне нужно преобразовать его в трехмерный массив этого типа:

b_2 = np.array([[[1, 2],
                 [3, 4]],

                [[3, 4],
                 [5, 6]],

                [[5, 6],
                 [7, 8]],

                [[7, 8],
                 [9, 10]]])

, поэтому в этом случае у меня есть прогнозы для каждого lookback с новой точкой. Я думаю, что это можно сделать с помощью сложного решения, использующего множество вложенных циклов for, но мне интересно, есть ли еще способ pythoni c. Thx.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Вы ищете скользящее windows, и для этого есть skimage's view_as_windows -

In [46]: from skimage.util.shape import view_as_windows

In [44]: features = 2; lookback = 2

In [45]: view_as_windows(b,(lookback, features))[:,0]
Out[45]: 
array([[[ 1,  2],
        [ 3,  4]],

       [[ 3,  4],
        [ 5,  6]],

       [[ 5,  6],
        [ 7,  8]],

       [[ 7,  8],
        [ 9, 10]]])
1 голос
/ 06 марта 2020

Используйте numpy .stack () следующим образом.

>>> np.stack((b[:-1], b[1:]), axis=1)
array([[[ 1,  2],
        [ 3,  4]],

       [[ 3,  4],
        [ 5,  6]],

       [[ 5,  6],
        [ 7,  8]],

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