将NumPy数组分割为全零的独立部分



我有一个一维的np.array,它具有以下模式

  1. array = [seq_1, seq_2, seq_3]
  2. seq_1seq_3均为0
  3. seq_2至少包含一个1

,我想把array分成seq_1,seq_2seq_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.diffnp.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)

此方法将把任何数组分解为齐次序列,而不考虑其值。