Как векторизовать одно горячее кодирование l oop in numpy - PullRequest
1 голос
/ 30 марта 2020

Есть ли способ векторизовать l oop в этом коде?

def get_onehot(y):
    categories = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    arr = np.zeros((y.shape[0], len(categories)))
    for i in range(y.shape[0]):
        n = y[i]
        arr[i][n] = 1
    return arr

>>> get_onehot(np.array([0, 2, 5]))
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])

Например, я предполагаю, что это не самый эффективный способ сделать это, и мне интересно, если есть улучшение кода имеется.

1 Ответ

4 голосов
/ 30 марта 2020

Если вы не хотите использовать scikit-learn, вот способ NumPy:

import numpy as np

def get_onehot(y, n=10):
    return np.eye(n)[y]

get_onehot(np.array([0, 2, 5]))

# array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
#        [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])

np.eye документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...