У меня есть 3D-матрица, содержащая N x N ковариационных матриц для M каналов [M x N x N]. У меня также есть двумерная матрица коэффициентов масштабирования для каждого канала в серии моментов времени [M x T]. Я хочу создать матрицу 4D, содержащую масштабированную версию ковариации соответствующего канала в каждый момент времени. Чтобы было ясно, [M x T] * [M x N x N] -> [M x T x N x N]
Текущая версия, используемая для циклов:
m, t, n = 4, 10, 7
channel_timeseries = np.zeros((m, t))
covariances = np.random.rand(m, n, n)
result_array = np.zeros((m, t, n, n))
# Each channel
for i, (channel_cov, channel_timeseries) in enumerate(zip(covariances, channel_timeseries)):
# Each time point
for j, time_point in enumerate(channel_timeseries):
result_array[i, j] = time_point * channel_cov
Это должно привести к тому, что массив результатов будет иметь все нули. Заменив инициализацию channel_timeseries на np.ones
, мы должны увидеть ковариацию для каждого реплицированного канала без изменений на каждом шаге временного ряда.
Случай, который на самом деле имеет значение для меня, - это случай, в котором каждый канал имеет скалярное значение в каждой временной точке, и мы масштабируем ковариационную матрицу для соответствующего канала на значение, соответствующее правильному каналу и временной точке.
Как вы можете видеть выше, я могу сделать это с помощью a для l oop и он работает совершенно нормально, но я работаю с некоторыми огромными наборами данных, и было бы лучше иметь векторизованное решение.
Большое спасибо за ваше время.