Вам просто нужно дать numpy.split
индексы, необходимые для разделения массива
a = np.array([1,1,1,2,2,1,3,3,1])
np.split(a, np.argwhere(np.diff(a) != 0)[:,0] + 1)
# [array([1, 1, 1]), array([2, 2]), array([1]), array([3, 3]), array([1])]
Подробности
Использование np.diff(a)
васполучить различия между каждым последовательным элементом
np.diff(a)
# array([ 0, 0, 1, 0, -1, 2, 0, -2])
Точки, в которых различия не равны 0, - это точки, в которых элементы не последовательно совпадают.Так как вы ищете индексы, где нужно внести изменения np.diff(a) != 0
, который возвращает:
np.diff(a) != 0
# array([False, False, True, False, True, True, False, True])
Чтобы преобразовать логические значения в индексы, вы можете использовать np.argwhere
np.argwhere(np.diff(a) != 0)
# array([[2],[4],[5],[7]])
# since we only need this for 1d arrays
np.argwhere(np.diff(a) != 0)[:,0]
# array([2, 4, 5, 7])
Вы просто используете вышеупомянутую процедуру для предоставления правильных индексов для np.split
np.split(a, np.argwhere(np.diff(a) != 0)[:,0])
# [array([1, 1]), array([1, 2]), array([2]), array([1, 3]), array([3, 1])]
Woops ... неправильных индексов ... Кажется, мы отключены на 1 индекс.Нет проблем, просто добавьте +1 к результатам np.argwhere
np.split(a, np.argwhere(np.diff(a) != 0)[:,0] + 1)
# [array([1, 1, 1]), array([2, 2]), array([1]), array([3, 3]), array([1])]