J'ai le tableau suivant:
[[0.07704314 0. 0. 0. ] [0. 0.02914078 0. 0. ] [0.32757561 0 0. 0. ] [0. 0. 0.26657932 0. ]]
Je veux trouver la valeur minimale dans chaque ligne du tableau. Comment puis-je y parvenir?
Réponse attendue:
np.array([[0.07704314, 0.46752589, 0.39533099, 0.35752864],
[0.45813299, 0.02914078, 0.65307364, 0.58732429],
[0.32757561, 0.32946822, 0.59821108, 0.45585825],
[0.49054429, 0.68553148, 0.26657932, 0.38495586]])
3 Réponses :
np.amin (a, axis = 1) où a est votre tableau np
Je souhaite conserver les dimensions et les indices. Je veux remplir 0 où les valeurs ne sont pas minimales. Votre solution donne un tableau à dimension unique de valeurs minimales.
Oui, tu as raison. Pour une raison quelconque, je n'ai pas lu la partie réponse attendue. Pardon.
IIUC trouve d'abord la valeur min de chaque ligne, puis nous basons sur la valeur min masque toute la valeur min dans le tableau d'origine comme True, en utilisant multiple (matrice ), obtenez ce dont nous avons besoin comme résultat
np.multiply(a,a==np.min(a,1)[:,None])
Out[225]:
array([[0.07704314, 0. , 0. , 0. ],
[0. , 0.02914078, 0. , 0. ],
[0.32757561, 0. , 0. , 0. ],
[0. , 0. , 0.26657932, 0. ]])
Vous pouvez utiliser le kwarg keepdims = True ici.
Vous pouvez utiliser np.where comme ceci:
out = np.zeros_like(a) idx = a.argmin(1)[:, None] np.put_along_axis(out, idx, np.take_along_axis(a, idx, 1), 1)
Ou (plus de lignes mais potentiellement plus efficace):
np.where(a.argmin(1)[:,None]==np.arange(a.shape[1]), a, 0)