Vectorizar matriz de caracteres 2D en columnas

Tengo una matriz numpy 2D como la siguiente:

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

Y necesito convertirlo en valores numéricos en columna, como el siguiente (salida deseada):

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

Sin embargo, para interpretarlo en sentido descendente, también necesito tener una salida para rastrear desde los valores numéricos hasta los valores originales. Estaba pensando en algo como esto:

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

Donde las teclas externas son los índices de columna de la matriz original y los dictados internos dan la asignación del valor numérico: carácter.

Hay una manera fácil de hacer esto, preferiblemente algo ensklearn estilo, donde puedo hacer unfit_transform, y entoncestransform (para fines de entrenamiento y prueba)?

Estaba mirando asklearn 'sLabelEncoder, y esencialmente lo que necesito es aplicar uno diferente en cada columna. ¿Alguna sugerencia sobre cómo hacer esto de manera eficiente?

¡Gracias

Jac

Respuestas a la pregunta(1)

Su respuesta a la pregunta