用迭代条件对循环进行矢量化以生成掩码



我正在尝试将以下问题矢量化:

time_lag = np.linspace(0, 10, 50)
time = np.arange(100)
dt = np.abs(time[:,None]-time[None, :]) ## calculate matrix of differences
mask = []
for num in range(len(time_lag)-1):
m0 = (time_lag[num] < dt) & (dt < time_lag[num+1])
## do something with mask 
mask.append(m0)
mask = np.array(mask)

理想情况下,我将获得具有与dt.shape和time_lag.size-1相对应的形状(49100100(的掩模阵列。我正在寻找for循环的真正矢量化(即不使用np.vvectorize(。这在np.where中可能吗?

没有注意代码的作用,但这会产生等效的结果,就好像您在代码末尾要求执行mask = np.array(mask)一样。

time_lag = np.linspace(0, 10, 50)
time = np.arange(100)
dt = np.abs(time[:,None]-time[None, :]) ## calculate matrix of differences
# vectorized
mask_p = (time_lag[:-1, None, None] < dt[None]) & 
(dt[None] < time_lag[1:, None, None])
# iterative
mask = []
for num in range(len(time_lag)-1):
m0 = (time_lag[num] < dt) & (dt < time_lag[num+1])
## do something with mask 
mask.append(m0)
mask = np.asarray(mask)
assert np.all(mask == mask_p)

最新更新