Di que tengo
Y = np.array([2, 0, 1, 1])
De esto quiero obtener una matriz X con forma (len(Y), 3)
. En este caso particular, la primera fila de X debe tener un uno en el segundo índice y cero en otro. La segunda fila de X debería tener uno en el índice 0 y cero en caso contrario. Para ser explícito:
X = np.array([[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 0]])
¿Cómo produzco esta matriz? Comencé con
X = np.zeros((Y.shape[0], 3))
pero luego no pudo averiguar cómo rellenar / completar los de la lista de índices
Como siempre, gracias por tu tiempo!
Tal vez:
>>> Y = np.array([2, 0, 1, 1]) >>> X = np.zeros((len(Y), 3)) >>> X[np.arange(len(Y)), Y] = 1 >>> X array([[ 0., 0., 1.], [ 1., 0., 0.], [ 0., 1., 0.], [ 0., 1., 0.]])
Para dar una alternativa de una sola línea a la respuesta perfectamente buena de DSM:
>>> Y = np.array([2, 0, 1, 1]) >>> np.arange(3) == Y[:, np.newaxis] array([[False, False, True], [ True, False, False], [False, True, False], [False, True, False]], dtype=bool)
Y = np.array([2, 0, 1, 1]) new_array = np.zeros((len(Y),3)) for i in range(len(Y)): new_array[i,Y[i]] = 1
Creo que … no creo que haya una manera más fácil (pero podría estar equivocado)