Укладка массивов неравной формы - PullRequest
0 голосов
/ 29 февраля 2020
 `print(np.array([arr[2:4], arr[3:5]])) # same shape`

Я могу сделать стекирование в вышеупомянутых случаях, чтобы получить трехмерный массив, чтобы я мог тренировать сеть LSTM. Но у меня есть массив двумерных массивов неравной длины. Например: `

print(np.array([arr[:2], arr[:3]]))
[array([[0, 1],
       [2, 3]])
 array([[0, 1],
       [2, 3],
       [4, 5]])]

` Как я могу получить 3d-массив в этом случае, чтобы я мог тренировать свою сеть LSTM? Пожалуйста помоги. Если есть какие-либо альтернативы, пожалуйста, укажите.

1 Ответ

0 голосов
/ 29 февраля 2020

Для ввода LSTM, для пакетирования ваших последовательностей вам необходим мини-пакет одинакового размера. Для этого вы можете использовать np.pad, чтобы сделать его одинакового размера. Обычно вы дополняете нулями.

>>> a = np.pad(a, pad_width=[(0,1),(0,0)])    # pad by zeros
>>> a
array([[0, 1],
       [2, 3],
       [0, 0]])
>>> b
array([[0, 1],
       [2, 3],
       [4, 5]])

>>> np.stack([a,b])
array([[[0, 1],
        [2, 3],
        [0, 0]],

       [[0, 1],
        [2, 3],
        [4, 5]]])

Параметр

pad_width: {sequence, array_like, int}

  • Количество значений, добавленных к краям каждой оси. ((before_1, after_1),… (before_N, after_N)) уникальная ширина площадки для каждой оси. ((до, после),) дает одинаковые до и после площадки для каждой оси. (pad,) или int - это сокращение для before = after = ширина площадки для всех осей.

Другие варианты см. здесь

...