Как я могу создать кодировщик меток, используя только numpy (а не sklearn LabelEncoder)? - PullRequest
3 голосов
/ 31 марта 2020

Я пытаюсь воссоздать что-то похожее на sklearn.preprocessing.LabelEncoder

Однако я не хочу использовать sklearn или pandas. Я хотел бы использовать только numpy и стандартную библиотеку Python. Вот чего я хотел бы достичь:

import numpy as np
input = np.array([['hi', 'there'],
                     ['scott', 'james'],
                     ['hi', 'scott'],
                     ['please', 'there']])

# Output would look like
np.ndarray([[0, 0],
            [1, 1],
            [0, 2],
            [2, 0]])

Было бы также здорово иметь возможность отобразить его обратно, так что результат тогда выглядел бы точно так же, как ввод.

Если бы это было в электронной таблице, входные данные выглядели бы так: enter image description here

Ответы [ 2 ]

2 голосов
/ 31 марта 2020

Разговаривал со Скоттом Штольцманом и сплюнул о способе отменить принятый ответ.

Можно либо нести оригинал arr вместе с ними через их программу, либо записать сопоставления для каждого столбца. Если вы сделаете последнее, вот некоторый простой неисполняемый код, чтобы сделать это:

l = []

for real_column, encoded_column in zip(np.column_stack(arr), np.column_stack(arr2)):    
    d = {}
    for real_element, encoded_element in zip(real_column, encoded_column):
        d[encoded_element] = real_element
    l.append(d)
print(l)

Делая это с приведенными выше выходами:

[{0: 'hi', 2: «Скотт», 1: «Пожалуйста»}, {2: «Там», 0: «Джеймс», 1: «Скотт»}]

2 голосов
/ 31 марта 2020

Вот простое понимание, используя результат return_inverse из np.unique

arr = np.array([['hi', 'there'], ['scott', 'james'],
                ['hi', 'scott'], ['please', 'there']])

np.column_stack([np.unique(arr[:, i], return_inverse=True)[1] for i in range(arr.shape[1])])

array([[0, 2],
       [2, 0],
       [0, 1],
       [1, 2]], dtype=int64)

или применение по оси:

np.column_stack(np.apply_along_axis(np.unique, 0, arr, return_inverse=True)[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...