Для предисловия вам не следует использовать concatenate
здесь.
Настройка
a = np.arange(25).reshape(5,5)
L = [i for i in a]
Вы задаете вопрос:
Почему np.concatenate
меняет размер?
Это не изменение измерения, оно делает именно то, что должно, основываясь на вводе, который вы ему даете. Из документации :
Объединить последовательность массивов вдоль существующей оси
Когда вы передаете свой список в concatenate
, не думайте, что он пропускает список (5, 5)
, думайте о нем, как о пропуске 5 (5,)
массивов фигур, которые соединяются вдоль оси 0
, что будет интуитивно производить вывод формы (25,)
.
Теперь это поведение также дает представление о том, как обойти это. Если пропуск массивов формы 5 (5,)
приводит к выводу формы (25,)
, нам просто нужно пропустить массив (1, 5)
, чтобы получить вывод формы (5, 5)
. Мы можем сделать это, просто добавив измерение к каждому элементу L
:
np.concatenate([[i] for i in L])
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
Однако , намного Лучший способ подойти к этому - просто использовать stack
, vstack
и т. Д.
>>> np.stack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> np.vstack(L)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])