Eul*_*sel 3 python numpy python-itertools
假设我有以下列表:
a = [True, True, True, False, False, False, False, True, True]
Run Code Online (Sandbox Code Playgroud)
怎样才能让他们最好只要么返回分组0,3,7或分组像下面这样?
[True, True, True]
[False, False, False, False]
[True, True]
Run Code Online (Sandbox Code Playgroud)
背景:我试图在我的 NumPy 数组中找到平台,虽然将导数设置为零是一个好的开始,但我仍然需要将数组排序为块。我认为这基本上归结为上述问题。
我查找了 NumPy 和 itertools(试图从问题NumPy grouping using itertools.groupby performance 中获得解决方案)但我没有成功。我想人们可能会使用itertools.takewhile和 filtfalse的组合(请参阅此处的文档),但我对此并不了解。或者也许我只是想得太复杂了。
我们可以通过切片数组比较来获得索引,并且对于大尺寸列表/数组的性能应该很好 -
a_ext = np.r_[~a[0],a]
out = np.flatnonzero(a_ext[:-1]!=a_ext[1:])
Run Code Online (Sandbox Code Playgroud)
作为单线,我们可以使用np.diff+ np.flatnonzero-
np.flatnonzero(np.diff(np.r_[~a[0],a]))
# compact alternative : np.where(np.diff(np.r_[~a[0],a]))[0]
Run Code Online (Sandbox Code Playgroud)