2015-12-17 5 views
-2

У меня есть отсортированный массив, как так -Элементы маркировки на основе уникальности

[[ 0 ] 
[ 0 ] 
[ 0 ] 
[ 3 ] 
[ 4 ] 
[ 15 ] 
[ 17 ] 
[ 87 ] 
[ 87 ] 
[ 87 ] 
[ 92 ] 
[ 180 ] 
[ 180 ] 
[ 215 ] 
[ 602 ] 
[ 1254 ]] 

Я хочу, чтобы маркировать элементы массива, основанные на их уникальности. Таким образом, повторяющиеся значения должны принимать одинаковые метки. Начальные дублированные элементы 0 будут помечены как 0, а остальные должны быть последовательными числами. Позже в массиве есть три значения 87, и они должны быть помечены как 5, а затем два значения 180 должны быть помечены как 7 '. Конечный результат Ищу бы -

[[ 0  0 ] 
[ 0  0 ] 
[ 0  0 ] 
[ 3  1 ] 
[ 4  2 ] 
[ 15  3 ] 
[ 17  4 ] 
[ 87  5 ] 
[ 87  5 ] 
[ 87  5 ] 
[ 92  6 ] 
[ 180  7 ] 
[ 180  7 ] 
[ 215  8 ] 
[ 602  9 ] 
[ 1254  10 ]] 

ответ

0

Вы можете просто цикл через массив и когда текущий элемент отличается от предыдущего, то увеличивают свой счетчик и добавить счетчик в текущий элемент, подобный этому

count = 0 
prev = l[0][0] 
for i in l: 
    if i[0] != prev: 
     prev = i[0] 
     count+=1 
    i.append(count) 

print np.array(l) 


[[ 0 0] 
[ 0 0] 
[ 0 0] 
[ 3 1] 
[ 4 2] 
[ 15 3] 
[ 17 4] 
[ 87 5] 
[ 87 5] 
[ 87 5] 
[ 92 6] 
[ 180 7] 
[ 180 7] 
[ 215 8] 
[ 602 9] 
[1254 10]] 
+1

Поскольку OP особо интересуется решением массива, вы должны сделать 'np.array (i)' в конце. – Reti43

+0

SirParselot, большое вам спасибо за интерес и ответ. его очень полезное спасибо снова – Kemal

1

Вы хотите найти идентификаторы на основе уникальности среди элементов, которые могут быть получены с помощью дополнительного аргумента return_inverse используется в np.unique, как так -

_,idx = np.unique(A,return_inverse=True) 

Пример запуска:

1) Входной массив -

In [86]: A 
Out[86]: 
array([[ 0], 
     [ 0], 
     [ 0], 
     [ 3], 
     [ 4], 
     [ 15], 
     [ 17], 
     [ 87], 
     [ 87], 
     [ 87], 
     [ 92], 
     [ 180], 
     [ 180], 
     [ 215], 
     [ 602], 
     [1254]]) 

2) Получить уникальные идентификаторы для всех элементов и отображать их рядом с входными элементами -

In [87]: _,idx = np.unique(A,return_inverse=True) 

In [88]: np.column_stack((A,idx)) 
Out[88]: 
array([[ 0, 0], 
     [ 0, 0], 
     [ 0, 0], 
     [ 3, 1], 
     [ 4, 2], 
     [ 15, 3], 
     [ 17, 4], 
     [ 87, 5], 
     [ 87, 5], 
     [ 87, 5], 
     [ 92, 6], 
     [ 180, 7], 
     [ 180, 7], 
     [ 215, 8], 
     [ 602, 9], 
     [1254, 10]]) 
+0

Divakar, спасибо за вашу помощь, это очень полезно для меня. Спасибо снова и снова .... – Kemal

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