Vectorize a matriz de caracteres 2D em colunas

Tenho uma matriz numpy 2D como a seguinte:

a=np.array([["Science", "Blue", 3],
            ["Math", "Red", 4],
            ["Math", "Red", 5],
            ["Science", "Red", 3]])

E eu preciso convertê-lo em valores numéricos na coluna, como o seguinte (saída desejada):

out=np.array([[0, 0, 0],
              [1, 1, 1],
              [1, 1, 2], 
              [0, 1, 0]])

No entanto, para interpretabilidade a jusante, também preciso ter uma saída para rastrear dos valores numéricos para os valores originais. Eu estava pensando algo assim:

trace_back_dict = {0: {0: "Science", 1: "Math"}, 
                   1: {0: "Blue", 1: "Red"}, 
                   2: {0: 3, 1: 4, 2: 5}}

Onde as chaves externas são os índices da coluna da matriz original e os ditados internos fornecem o mapeamento do valor numérico: caracter

Existe uma maneira fácil de fazer isso, de preferência algo emsklearn style, onde eu posso fazer umfit_transform, e depoistransform (para fins de treinamento e teste)?

Eu estava olhandosklearn 'sLabelEncoder, e essencialmente o que eu preciso é aplicar um diferente em cada coluna. Alguma sugestão de como fazer isso com eficiência?

Obrigado

Jack

questionAnswers(1)

yourAnswerToTheQuestion