我有一个布尔数组,并且想将它转换为一个数组,其中只有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)
有没有更快的方法呢?特别是列表理解对我来说似乎很复杂......
你应该能够简单地使用 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,因此请在尝试之前验证这一点。