Numpy: стеки массивов, чьи внутренние размеры отличаются - PullRequest
0 голосов
/ 18 октября 2018

У меня есть ситуация, похожая на следующую:

import numpy as np

a = np.random.rand(55, 1, 3)
b = np.random.rand(55, 626, 3)

Здесь фигуры представляют количество наблюдений, затем количество временных интервалов на одно наблюдение, затем количество измерений наблюдения в данномвременной интервалТаким образом, b - полное представление трех измерений для каждого из 55 наблюдений в одном новом временном интервале.

Я бы хотел сложить a и b в массив с формой 55, 627, 3.Как можно сделать это в NumPy?Любые предложения будут с благодарностью!

1 Ответ

0 голосов
/ 18 октября 2018

Чтобы продолжить ответ Дивакара, приведенный выше, аргумент 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.Чтобы визуализировать последовательность позиций наблюдений во времени, я хочу добавить новые позиции в массив предыдущих позиций, отсюда и вопрос выше.

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