Чтобы продолжить ответ Дивакара, приведенный выше, аргумент axis
в numpy является индексом данного измерения в форме массива.Здесь я хочу сложить a
и b
в силу их среднего значения формы, которое имеет индекс = 1:
import numpy as np
a = np.random.rand(5, 1, 3)
b = np.random.rand(5, 100, 3)
# create the desired result shape: 55, 627, 3
stacked = np.concatenate((b, a), axis=1)
# validate that a was appended to the end of b
print(stacked[:, -1, :], '\n\n\n', a.squeeze())
Это возвращает:
[[0.72598529 0.99395887 0.21811998]
[0.9833895 0.465955 0.29518207]
[0.38914048 0.61633291 0.0132326 ]
[0.05986115 0.81354865 0.43589306]
[0.17706517 0.94801426 0.4567973 ]]
[[0.72598529 0.99395887 0.21811998]
[0.9833895 0.465955 0.29518207]
[0.38914048 0.61633291 0.0132326 ]
[0.05986115 0.81354865 0.43589306]
[0.17706517 0.94801426 0.4567973 ]]
Пуристможет использовать вместо np.all(stacked[:, -1, :] == a.squeeze())
для проверки этой эквивалентности.Вся слава @Divakar!
Строго для любопытных, случай использования этой конкатенации является своего рода изощренным конвейером подготовки данных для нейронной сети долгосрочной кратковременной памяти.В такой сети форма обучающих данных должна быть number_of_observations, number_of_time_intervals, number_of_dimensions_per_observation
.Я генерирую новые прогнозы для каждого объекта в новом интервале времени, поэтому эти прогнозы имеют форму number_of_observations, 1, number_of_dimensions_per_observation
.Чтобы визуализировать последовательность позиций наблюдений во времени, я хочу добавить новые позиции в массив предыдущих позиций, отсюда и вопрос выше.