NumPy / Pandas:转换"步骤"进入bool面具

时间:2016-08-04 17:05:05

标签: pandas numpy vectorization

我有一个这样的数组:

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循环,我怎么能这样做,所以如果输入数组很大,它会很快?我也很高兴使用熊猫。

1 个答案:

答案 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