Как заменить повторяющихся индексы на новые?
У меня есть двумерный массив, в котором в первом столбце должны быть написаны уникальные числа от 1 до n. Проблема в том, что некоторых чисел там несколько и нужно заменить повторяющиеся на максимальное + 1.
database - название массива, который нужно обработать.
Вот так я пробовал, но тут происходит замена всех повторяющихся чисел, а мне нужно оставить уникальное число напротив каждого рядка:
array2 = np.unique(database[:, 0], return_counts=True)
i = 0
max = np.amax(array2[0]) + 1
while array2[1].size > i:
if(array2[1][i] > 1):
database[database == array2[0][i]] = max
max = max + 1
i = i + 1
Вот что я доделал и оно работает, но я думаю, что это можно сделать в несколько строк, а не писать вот такие циклы
array2 = np.unique(database[:, 0], return_counts=True)
i = 0
max = np.amax(array2[0]) + 1
while array2[1].size > i:
if(array2[1][i] > 1):
q = np.where(database[ : , 0] == array2[0][i])
j = 1
while j < q[0].size:
database[q[0][j]][0] = max
max = max + 1
j = j + 1
i = i + 1
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
a = database[:, 0]
idx = np.arange(1, len(a))[np.diff(a) == 0]
a[idx] = np.arange(a.max() + 1, a.max() + len(idx) + 1)
Пример:
исходный вектор:
In [101]: a = np.array([5,6,6,6,7,8,8,9])
In [102]: a
Out[102]: array([5, 6, 6, 6, 7, 8, 8, 9])
решение:
idx = np.arange(1, len(a))[np.diff(a) == 0]
a[idx] = np.arange(a.max() + 1, a.max() + len(idx) + 1)
результат:
In [105]: a
Out[105]: array([ 5, 6, 10, 11, 7, 8, 12, 9])

