Векторизованные ненулевые группы в массиве numpy

#python #numpy

#python #numpy

Вопрос:

Допустим, у вас есть 1d массив numpy:

 [0,0,0,0,0,1,2,3,0,0,0,0,4,5,0,0,0]
  

Как бы вы создали следующие группы без использования цикла for?

 [1,2,3], [4,5]
  

Ответ №1:

Вот один из способов использования np.split :

 a
# array([0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 4, 5, 0, 0, 0])
### find nonzeros
z = a!=0
### find switching points
z[1:] ^= z[:-1]
### split at switching points and discard zeros
np.split(a, *np.where(z))[1::2]
# [array([1, 2, 3]), array([4, 5])]
  

Комментарии:

1. Есть ли способ получить индексы?