Skip to main content
 首页 » 编程设计

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

2025年05月04日13zhujiabin

我有一个 bool 数组,我想将其转换为一个数组,其中只有 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] 

我的方法:

>>> 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] 

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

请您参考如下方法:

你应该能够简单地使用 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) 

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

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