我有一个这样的数组:
arr = np.array([4, 6, 3, 9, 2, 100, 3, 1, 1, 1, 1])
我想将它转换为像这样的bool数组:
[ T, F, F, F, T, F, T, F, F, T, T]
# 4, 6, 3, 9, 2, 100, 3, 1, 1, 1, 1
我可以用这样的循环来做到这一点:
mask = np.zeros(len(arr), dtype=bool)
ii = 0
while ii < len(arr):
mask[ii] = True
ii += arr[ii]
它是一种间接索引方案,其中输入中的每个元素告诉我们有多少后续元素无效。
如果不使用Python循环,我怎么能这样做,所以如果输入数组很大,它会很快?我也很高兴使用熊猫。
答案 0 :(得分:2)
可能有一些我没想到的矢量化技巧,但是如果你可以使用numba
,它很适合这样的问题 - 这个循环现在应该非常快。 / p>
import numba
@numba.jit(nopython=True)
def jump_mask(arr):
mask = np.zeros(len(arr), dtype=np.bool_)
ii = 0
while ii < len(arr):
mask[ii] = True
ii += arr[ii]
return mask