У меня есть последовательность s = [4,3,1,0,5]
и num_classes = 6
и я хочу, чтобы генерировать матрицу Numpy m
в форме (len(s), num_classes)
, где m[i,j] = 1 if s[i] == j else 0
.генерируют последовательность с помощью индексов/один горячего кодирования
Есть ли такая функция в Numpy, где я могу пройти s
и num_classes
?
Это также называется кодировкой 1-k или одноразовым.
timeit
результаты:
def b():
m = np.zeros((len(s), num_classes))
m[np.arange(len(s)), s] = 1
return m
In [57]: timeit.timeit(lambda: b(), number=1000)
Out[57]: 0.012787103652954102
In [61]: timeit.timeit(lambda: (np.array(s)[:,None]==np.arange(num_classes))+0, number=1000)
Out[61]: 0.018411874771118164
Любая хорошая причина для downvote на другой ответ? – Divakar
Я играл с 'timeit', и это кажется самым быстрым решением. Благодаря! – Albert
@Albert прохладно. Было бы неплохо, если бы вы могли добавить свои результаты времени на вопрос, для потомков – shx2