首页 > 解决方案 > 什么是使数组中的下 n 项为 True 的最 Pythonic 方法,只要数组中有 True 值

问题描述

我有一个布尔数组

[False, False, True, True, False, True, False, False, False]

无论哪里有 True 值,我都想让数组的下 n 个元素为 True。如果在这种情况下我选择 n=2,这个数组就会变成

[False, False, True, True, True, True, True, True, False]

什么是最 Pythonic 的方式来做到这一点,而不使用 for 循环?

标签: pythonarraysnumpy

解决方案


一种快速的方法是使用np.convolve

rng = np.random.default_rng()
a = rng.integers(0,4,20)<1
a
# array([False, False, False, False, False, False, False, False,  True,
#        False, False,  True, False, False, False, False,  True, False,
#        False, False])
n = 3
np.convolve(a,np.ones(n+1,bool),"full")[:-n]
# array([False, False, False, False, False, False, False, False,  True,
#        True,  True,  True,  True,  True,  True, False,  True,  True,
#        True,  True])

推荐阅读