2015-01-28 3 views
2

Say сгенерировать 1d Numpy массив:Получить индексы Numpy 1d массива, где значение больше предыдущего элемента

r=np.random.randint(0,10,(10,)) 

даяние, например:

array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7]) 

я могу найти индексы, где элемент больше, чем предыдущий (элемент влево) так:

for x in range(r.shape[0]): 
    if r[x]>r[x-1]: 
     p[x]=1 
    else: 
     p[x]=0 
np.where(p==1)[0] 

давая:

array([1, 2, 3, 5, 8, 9]) 

Есть ли лучший способ сделать это?

ответ

5

Вы можете использовать numpy.diff с numpy.where:

>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7]) 
>>> np.where(np.diff(arr) > 0)[0] + 1 
array([1, 2, 3, 5, 8, 9]) 
+2

Я бы добавил комментарий, почему +1. Не может быть очевидным с первого взгляда (или через 6 месяцев) –

0

В качестве альтернативы можно использовать массив нарезка:

>>> arr = np.array([1, 5, 6, 7, 7, 8, 8, 0, 2, 7]) 
>>> np.where(np.r_[False, arr[1:] > arr[:-1]])[0] 
array([1, 2, 3, 5, 8, 9]) 

Вы сдвигать массив один справа и сравнить его с собой. Длина результата короче исходного массива. Поскольку первое значение не может сравниться с одним из его значений, вы устанавливаете первый результат в false.

Смежные вопросы