Numpy: changement de max dans chaque ligne à 1, tous les autres nombres de 0
Je suis en train de mettre en œuvre une fonction numpy qui remplace le max dans chaque ligne d'un tableau 2D avec 1, et tous les autres chiffres avec zéro:
>>> a = np.array([[0, 1],
... [2, 3],
... [4, 5],
... [6, 7],
... [9, 8]])
>>> b = some_function(a)
>>> b
[[0. 1.]
[0. 1.]
[0. 1.]
[0. 1.]
[1. 0.]]
Ce que j'ai essayé jusqu'à présent
def some_function(x):
a = np.zeros(x.shape)
a[:,np.argmax(x, axis=1)] = 1
return a
>>> b = some_function(a)
>>> b
[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]
Vous devez vous connecter pour publier un commentaire.
Méthode #1, le fait de modifier le vôtre:
[En fait,
range
fonctionne très bien, je l'ai écritarange
de sortir de l'habitude.]Méthode n ° 2, à l'aide de
max
au lieu deargmax
pour gérer le cas où plusieurs éléments atteindre la valeur maximale::
tranche de syntaxe sur les lignes de faire la même chose que de fournir un tableau avec la ligne les indices eux-mêmes?max()
et dans le==
). Est-ce vrai?range
est en fait ralentissement de 13% au cours de mes testsa==np.max(a)
déclenchera une erreur dans l'avenir, voici donc une version remaniée qui continuera à diffuser correctement.Je sais que cette question est assez ancienne, mais je pense avoir une solution décente c'est un peu différente des autres solutions.
si la mise à jour doit être mis en place, vous pouvez le faire
a.max(axis=1).reshape(-1, 1)
vous pouvez fairea.max(axis=1, keepdim=True)
.keepdims
Je préfère utiliser numpy.où comme suit: