Python:从布尔数组中获取最后 n 个真值

Boe*_*ern 1 python numpy

我有一个布尔数组,并且想将它转换为一个数组,其中只有last_n_trues True值仍然是True. 一个简单的例子:

>>> boolean_array = [False, False, True, True, True, False, False]
>>> last_n_trues = 2
>>> desired_output = [False, False, False, True, True, False, False]
Run Code Online (Sandbox Code Playgroud)

我的做法:

>>> import numpy as np
>>> idxs_of_trues = np.where(boolean_array)[0] 
array([2, 3, 4], dtype=int64)

>>> idxs_of_trues_last_n = idxs_of_trues[-last_n_trues:] 
array([3, 4], dtype=int64)

>>> [x in idxs_of_trues_last_n for x in range(0, len(boolean_array))]
[False, False, False, True, True, False, False]
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法呢?特别是列表理解对我来说似乎很复杂......

use*_*203 5

你应该能够简单地使用 np.where

In [116]: x
Out[116]: array([False, False,  True,  True,  True, False, False], dtype=bool)

In [117]: x[np.where(x)[0][:-2]] = False

In [118]: x
Out[118]: array([False, False, False,  True,  True, False, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

这只是将所有True不是最后两个的替换为False

这仅在x是 a时才有效np.array,因此请在尝试之前验证这一点。