我有一个 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 时有效,因此请在尝试之前验证这一点。
