假设我有一个 NumPy 数组:
x = np.array([0, 1, 2, 0, 4, 5, 6, 7, 0, 0])
在每个索引处,我想找到到最接近的零值的距离。如果位置本身为零,则返回零作为距离。之后,我们只对到当前位置右侧最接近的零的距离感兴趣。超级天真的方法是这样的:
out = np.full(x.shape[0], x.shape[0]-1)
for i in range(x.shape[0]):
j = 0
while i + j < x.shape[0]:
if x[i+j] == 0:
break
j += 1
out[i] = j
输出将是:
array([0, 2, 1, 0, 4, 3, 2, 1, 0, 0])
我注意到零之间的输出中有倒计时/递减模式。所以,我也许可以使用零的位置(即,zero_indices = np.argwhere(x == 0).flatten()
)
在线性时间内获得所需输出的最快方法是什么?