J'ai un vecteur de booléen avec la dimension 1 * n
, supposons n = 6
. Je souhaite le remplacer par une matrice n * 2
. Pour chaque élément de vec
, s'il est 1
, alors dans la matrice, la ligne correspondante doit être [1, 0]
; s'il s'agit de 0
, la ligne correspondante doit être [0, 1]
. Ainsi, la matrice résultante doit êtreapproche vectorisée pour changer tableau booléen 1 dimension en 2 dimensions, python 3
matr = [[1, 0],
[0, 1],
[1, 0],
[0, 1],
[0, 1],
[1, 0]]
Pour convertir le vecteur à la matrice, il me faut une approche élégante vectorisée (évitant for-loops
), car dans le cas réel n
serait beaucoup plus grande que 6
. La raison de cette conversion est pour la classification d'apprentissage automatique. Le vec
fait référence à binary classification
, et le matr sera utilisé pour categorical classification
. Peut-être que cette information peut rendre ma question plus spécifique.
J'utilise Python 3, numpy/scipy, sklearn.
Quelqu'un peut-il m'aider avec? Merci.
Vous pouvez éliminer le besoin de 'stack' avec quelque chose comme' vec [:, None]^[0, 1] '. –
@Warren réflexion fantastique ... c'est aussi à partir d'un simple timeit ~ 50% plus rapide - voulez-vous afficher cela comme une réponse? –
@aura J'irais pour l'approche de Warren. Ce n'est pas aussi évident que ce que ça fait, mais c'est beaucoup plus rapide et produit aussi le résultat désiré. –