У меня есть огромный набор учебных материалов с 4 классами. Эти классы помечены не последовательно. Чтобы иметь возможность применять последовательную нейронную сеть, классы должны быть перемаркированы, чтобы уникальные значения в классах были последовательными. Кроме того, в конце сценария я должен переложить их обратно на свои старые значения.Векторизованная перемаркировка массива NumPy для последовательных чисел и возврат назад
Я знаю, как переименуйте их с петлями:
def relabel(old_classes, new_classes):
indexes=[np.where(old_classes ==np.unique(old_classes)[i]) for i in range(len(new_classes))]
for i in range(len(new_classes)):
old_classes [indexes[i]]=new_classes[i]
return old_classes
>>> old_classes = np.array([0,1,2,6,6,2,6,1,1,0])
>>> new_classes = np.arange(len(np.unique(old_classes)))
>>> relabel(old_classes,new_classes)
array([0, 1, 2, 3, 3, 2, 3, 1, 1, 0])
Но это не приятно кодирование, и это занимает довольно много времени.
Есть идеи, как векторизовать это повторное маркирование?
Чтобы быть ясно, я также хочу, чтобы иметь возможность переименовать их обратно к старым ценностям:
>>> relabeled_classes=np.array([0, 1, 2, 3, 3, 2, 3, 1, 1, 0])
>>> old_classes = np.array([0,1,2,6])
>>> relabel(relabeled_classes,old_classes)
array([0,1,2,6,6,2,6,1,1,0])
Но я могу также использовать это, чтобы переименуйте их обратно к старым ценностям? –
@WilmarvanOmmeren Вы попробовали? Это будет перемаркироваться так же, как и то, что вы проявляете с помощью функции 'relabel', если вы не говорите о каком-то другом переклассификации? – Divakar
Да, это будет работать, когда я переместлю их из последовательных последовательных. Но не тогда, когда я хочу переделать их обратно к их старым значениям (таким образом последовательный к нескончаемому). Соррр, я расширил свой пример, чтобы быть более ясным! –