首页 > 解决方案 > 应用时移

问题描述

考虑数组r,维度为 [N,m],其中N是时间索引,m是网络中的元素数。考虑这m个元素中的每一个都相互连接,但是元素j中元素i的影响需要一些时间才能发生,即每个连接之间存在延迟矩阵delayMat给出的延迟,维度为 [m,m ]。

就是说,我有以下问题:我想创建一个矩阵 [m,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] 

标签: pythonnumpy

解决方案


将两个for循环替换为:

drate1=rate[0, delay, np.arange(30)]
drate3=rate[2, delay, np.arange(30)]

推荐阅读