我有一个一维的np.array
,它具有以下模式
array = [seq_1, seq_2, seq_3]
seq_1
和seq_3
均为0
seq_2
至少包含一个1
,我想把array
分成seq_1
,seq_2
和seq_3
。
例如,
array = [0,0,0,1,1,1,1,0,0,0]
seq_1, seq_2, seq_3 = [0,0,0], [1,1,1,1], [0,0,0]
array = [0,1,0,0,0,0,0,0,1,0]
seq_1, seq_2, seq_3 = [0], [1,0,0,0,0,0,0,1], [0]
array = [0,1,1,1,0,1,0,1,1,0]
seq_1, seq_2, seq_3 = [0], [1,1,1,0,1,0,1,1], [0]
是否有一种方法只使用NumPy
函数(意味着没有for循环)来实现这一点?
您可以使用np.diff
和np.flatnonzero
找到要分割的索引:
index = np.flatnonzero(np.diff(array)) + 1
那么你可以在索引上分割:
seq = np.split(array, index)
如果你想解包:
seq_1, seq_2, seq_3 = seq
作为一行代码:
seq_1, seq_2, seq_3 = np.split(array, np.flatnonzero(np.diff(array)) + 1)
此方法将把任何数组分解为齐次序列,而不考虑其值。