Рассмотрим массив r с размерами [N, м], где N - временной индекс, а m - количество элементов в сети. , Предположим, что каждый из этих m элементов соединяется друг с другом, но влияние элемента i в элементе j занимает некоторое время, т. Е. задержка между каждым соединением, заданная матрицей задержек delayMat , с размерами [м, м].
Сказал, что у меня есть следующая проблема: я хочу создать матрицу [м, m] со значениями массива r , но с надлежащими временными сдвигами (задержками), примененными после delayMat . Один из способов сделать это с помощью:
delay = n - delayMat
drate = np.zeros([m,m])
for i in range(m):
for j in range(m):
drate[j,i]=r[delay[j,i],i]
Где, n - это индекс фактического времени, уменьшите матрицу с задержанными значениями r для каждого соединения , Это работает, однако, это очень медленно в зависимости от m . Есть ли способ сделать это на numpy более оптимальным образом?
Пример кода (реальный код должен читать много данных, поэтому размещать его здесь непрактично):
import numpy as np
delayMat = np.random.randint(1,195,[30,30])
rate = np.random.normal(0,1,size=(4,1000,30))
n = 1000 # current time index
delay = n-delayMat
drate1 = np.zeros([30,30]) # delayed variable
drate3 = np.zeros([30,30])
for pre in range(30):
for pos in range(30):
drate1[pos,pre]=rate[0,delay[pos,pre],pre]
drate3[pos,pre]=rate[2,delay[pos,pre],pre]